: DriverManager 클래스의 getConnection()
: Connection 객체
Connection con = DriverManager.getConnection(url, user, pwd);
Statement 객체, PreparedStatement 객체, CallableStatement 객체 ( stored procedure )
Statement 객체 : SQL 전달할 때 SQL 문에 대한 사전 처리 등이 진행됨, 객체 생성 시에 SQL과 상관없이 생성.
update customer set address = '한국 서울' where custid = 6;
con = DriverManager.getConnection(url, user, pwd);
stmt = con.createStatement();
int ret = stmt.executeUpdate(updateSql);
PreparedStatement 객체 : SQL 전달 전에 객체가 만들어 질 때 SQL 문에 대한 사전 처리 등이 진행됨, 파라미터 자리에 ?를 쓸 수 있어서 편함(권장됨)
update customer set address = ? where custid = ?;
con = DriverManager.getConnection(url, user, pwd);
pstmt = con.prepareStatement(updateSql);
pstmt.setString(1, address);
pstmt.setInt(2, custId);
ret = pstmt.executeUpdate();
CallableStatement 객체 : stored procedure를 실행시키기 위해 사용되는 인터페이스
: query문을 하나의 파일 형태로 만들거나 데이터베이스에 저장해놓고 함수처럼 호출해서 사용하는 것 - 연속되는 쿼리문에서 빠른 성능을 보임
SQL 전달
ret = pstmt.executeUpdate();
return 값
return 정수 (insert, udate, delete 된 row 리턴 )
SQL 전달
resultSet = pstmt.executeQuery();
return 값
return resultSet; 읽은 ResultSet 객체가 반환됨
위의 jdbc interface 메소드의 처리는 모두 jdbc driver( implement 객체) 가 대행함
Connection 객체를 도로라 하고, PreparedStatement 객체를 자동차라고 하자.
도로가 있는데 자동차가 안다니면 안되고, 자동차가 있는데 도로가 있으면 안됨
-> connection 객체를 효율적으로 관리하기 위해 connection pool 사용
웹 컨테이너(WAS)가 실행되면서 일정량의 Connection 객체를 미리 만들어서 Pool에 저장.
APP이 반복적으로 무언가를 하려고 할 때 DB쪽에 미리 요청을 한다.
이때 DB가 (connection객체)n개를 주면, app이 사용하고 반납하는 형태
: common-dbcp2, tomcat-jdbc Pool, DriverManager DataSource, HikariCP
https://f-lab.kr/insight/understanding-database-connection-pool
CallableStatement 참고글: https://blog.naver.com/naomi007/10017208097