SELECT문 언급하신거 보니까 그룹함수정도 한번 보는게 좋을거같음
MAX,MIN,SUM,AVG,COUNT 등등... 통계목적으로쓰는
Connection과 Statement(어떻게 코드를 작성할건지), ResultSet을 활용하는 방법(어떤메소드이용하는지) + 커넥션풀을 활용할거면 어떻게 활용하는지(핵심 메소드, 주의사항)
jdbc가 하는 역할, jdbc를 쓰는 방법
prepareStatement와 그냥 statement의 차이(시험용으로는 핵심단어 4글자)
executeQuery와 executeUpdate의 활용 차이, 결과값이 어떻게 다른지
SELECT문 기억더듬어서 해보기 -> 특히 그룹함수(sum, max, count, avg)
CHAR와 VARCHAR2의 차이
java.sql.Connection를 통해 생성되는 객체
데이터베이스와 JSP를 연결할 때에 필요함
오토커밋 기능이 내장되어있음, 트랜잭션을 따로 처리하지 않아도 DB에 자동으로 커밋되는게 커넥션이 자동으로 해주기 때문임.
(참고 : https://solbel.tistory.com/861)
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "kh", "1234");
Statement st = con.createStatement();
( Connection 객체를 만들면서 jdbc를 사용함 )
뒤에 kh와 1234부분 주의해서 보기🤡
[출처] : https://ss-o.tistory.com/132
Class.forName 자체는 ()안에 넣은 클래스를 반환해주는 역할
드라이버 클래스를 반환하고
드라이버매니저라는 객체를 통해 getConnection메소드를 호출하며 Connection 생성
🔆강사님요약 : DriverManager는 정해진 곳과 연결을 수행해주는 클래스다
private DBConnectionMgr pool;
public PollMgr() {
pool = DBConnectionMgr.getInstance();
}
private로 DBConnectionMgr클래스로부터 객체 생성
기본 생성자에 pool(DBConnectionMgr에서 getInstance()를 실행한 반환값)을 초기화
해당 pool에 getConnection() 메소드를 실행한 결과(Connection형으로 반환)를
null로 초기화한 Connection객체에 넣어줌.
Connection con; //지역변수는 인스턴스변수와 다르게 null로 자동 초기화가 되지 않음
Statement st;
ResultSet rs = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "kh", "1234");
st = con.createStatement();
rs = st.executeQuery(
"select dept_id, dept_title, national_name from department
join location on (location_id = local_code)
join national using(national_code) ");
java.sql.Statement를 통해 생성되는 객체
Connection을 통해 연결된 객체에게 SQL문을 실행시킬 수 있다.
이 객체를 생성하기 위해선 반드시 Connection이 먼저 생성되어야 함.
execute어쩌구를 통해 쿼리문을 돌림
🔅강사님요약 : statement는 구문을 파싱해서 sql문을 전송하는 역할
🔅강사님요약 : prepareStatement는 원하는 데이터의 형태에 맞게 설정할 수 있도록 자리잡아주는 역할 (위치홀더)
근데 위치홀더 외에는 그냥 statement도 가능한 역할 아닌가?
쿼리문은 정적인 결과를 가져오기 때문에 동적인 효과를 기대하기 위해서
request로 전달받은 변수를 넣게 되는데
문자열인 쿼리문을 작성할 때에 변수를 편하게 넣기 위한게 prepareStatement.
일단 전부 물음표로 떄려박아놓고
이후에 몇번째 물음표가 어떤 변수를 의미하는지 셋팅해줌
setString(몇번째, 해당물음표에들어갈 값)
setInt(몇번째, 해당물음표에들어갈 값)
이처럼 타입에 따라 setXXX 메소드를 맞춰 활용한다.
- 🔅강사님요약 : resultset은 이렇게 쿼리문을 돌리고 나서 결과물을 받아 활용해야하는데 그 결과를 저장해두는 역할
parsing(코드 분석)
bind(치환)
execute(실행)
patch(실행 후 인출)
[출처] : https://ssunws.tistory.com/44
ArrayList나 Vector활용해서 자바빈 타입의 객체를 담음
저 객체 하나 하나의 안에는 여러 컬럼의 정보가 한 세트로 담겨있음(이름, 아이디, 연봉 등등)
rs.next()를 통해 다음 요소가 있는지 확인함과 동시에 다음 요소로 넘어감
setter를 이용해 자바빈 객체 안에 설정한 후 그걸 ArrayList나 Vector에 포장해서 담아놓음
마지막으로 차곡차곡 포장한걸 담은 ArrayList를 통쨰로 반환
강사님 말씀
- char(고정형) : 최대 2000바이트까지, 고정형이므로 설정한 값보다 적게 입력되면 나머지는 SPACE로 채워버림
- varchar2(가변형) : 최대 4000바이트까지, 가변형이기떄문에 일단 크게 설정해도 사용자가 입력한 값만큼의 크기를 다룸