JDBC

혀니·2024년 7월 24일
0

DB 연결 방법

: DriverManager 클래스의 getConnection()

DB 연결 객체

: Connection 객체

	Connection con = DriverManager.getConnection(url, user, pwd);

SQL 전달 , 결과 관리 객체

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 전달 / 결과 수신

C, U, D ( insert, update, delete )

SQL 전달

ret = pstmt.executeUpdate();

return 값

return 정수
(insert, udate, delete 된 row 리턴 )

R ( read = select )

SQL 전달

resultSet = pstmt.executeQuery();

return 값

return resultSet;
읽은 ResultSet 객체가 반환됨

위의 jdbc interface 메소드의 처리는 모두 jdbc driver( implement 객체) 가 대행함

Connection pool


Connection 객체를 도로라 하고, PreparedStatement 객체를 자동차라고 하자.
도로가 있는데 자동차가 안다니면 안되고, 자동차가 있는데 도로가 있으면 안됨
-> connection 객체를 효율적으로 관리하기 위해 connection pool 사용

connection pool

웹 컨테이너(WAS)가 실행되면서 일정량의 Connection 객체를 미리 만들어서 Pool에 저장.
APP이 반복적으로 무언가를 하려고 할 때 DB쪽에 미리 요청을 한다.
이때 DB가 (connection객체)n개를 주면, app이 사용하고 반납하는 형태

connection pool의 종류

: common-dbcp2, tomcat-jdbc Pool, DriverManager DataSource, HikariCP

https://f-lab.kr/insight/understanding-database-connection-pool


JDBC 불편한점

  • 많은 양의 코드 사용
  • 개발자들 코드 일관성 확보 어려움
  • 커넥션 풀 관리 이슈 어렵
  • 자바 코드 내에 sql문이 있음(가독성 안 좋음 - stringbuilder 써야된다던지)

CallableStatement 참고글: https://blog.naver.com/naomi007/10017208097

좋은 비교 글: https://blog.naver.com/naomi007/10017208097

0개의 댓글