1. JDBC Driver 로딩

  • Class.forName( )을 이용해서 Driver Class를 로딩하면 객체가 생성되고, DriverManager에 등록된다.
  • Driver 클래스를 찾지못하면 ClassNotFoundException이 발생한다.
Class.forName(driver);

1-1. DriverManager 클래스

  • DriverManager 클래스는 JDBC 드라이버를 통하여 Connection을 만드는 역할.
  • DriverManager는 Class.forName( ) 메소드를 통해서 생성된다.

2. Connection 생성

  • Connection - 데이터베이스와 연결하는 객체
  • DriverManager.getConnection( ) 으로 Connection 객체를 생성.
Connection conn = DriverManager.getConnection(jdbcUrl, user, pass);

2-1. Connection Pool 사용

  • @Resource 어노테이션은 특정 프로퍼티를 자동으로 연결해주는 역할을 수행한다. 즉, context.xml 파일에 미리 기입된 JDBC 연결 정보를 통해 일일히 하드코딩 해줄 필요 없이 연결 가능하게끔 만들어준다.
@Resource(name="context.xml에 지정한 driverClassName 기입")
DataSource ds;

Connection conn = ds.getConnection();

3. PreparedStatement

  • PreparedStatement는 데이터베이스의 연결로부터 SQL문을 실행할 수 있도록 해주는 클래스이다.
PreparedStatement pstmt = conn.prepareStatement(sql);
  • PreparedStatement는 SQL문을 작성할 때 컬럼 값을 실제로 지정하지 않고, 변수 처리 함으로서 DBMS을 효율적으로 사용합니다.
  • PreparedStatement의 SQL문은 SQL문의 구조는 같은데 조건문의 조건이 수시로 변할 때 조건의 변수처리를 "?" 문자로 처리하는데 이를 "바인딩 변수"라고 한다.
  • 바인딩 변수의 순서는 "?" 의 개수에 의해 결정이 되는데 시작 번호는 1 부터 시작하게 됩니다.
pstmt.setString(1,"name");

3-1. executeUpdate( )

  • SELECT 구문을 제외한 다른 구문을 수행할 때 사용되는 함수.
  • 수행결과로 Int 타입의 값을 반환.
  • INSERT / DELETE / UPDATE 관련 구문에서는 반영된 레코드의 건수를 반환
PreparedStatement pstmt = conn.prepareStatement(sql);
int affectLines = pstmt.executeUpdate();

3-2. executeQuery( )

  • SELECT 구문을 수행할 때 사용되는 함수.
  • 수행결과로 ResultSet 객체의 값을 반환.
  • 데이터를 SELECT로 갖고 오는 경우에는 가져온 결과 데이터를 처리하기 위한 ResultSet 객체가 필요
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
 ....
}

4. ResultSet

  • ResultSet은 조회한 결과 값에 순차적으로 접근할 수 있는 커서(위치표시자)를 다룰 수 있게 한다.
  • SELECT의 결과를 저장하는 객체
  • ResultSet은 next() 메서드를 이용해서 다음 로우로 이동

  • while(rs.next())와 같은 형태로 더 이상 로우가 없을 때까지 루프를 돌면서 데이터를 처리하는 방법을 이용한다.

ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
   String name = rs.getString("name");
   int age  = rs.getInt("email");
}
  • getString()이나 getInt()와 같은 메서드에서 "컬럼이름"을 지정하는 방법 또는 1번부터 시작하는 컬럼의 인덱스 번호를 통해 해당 칼럼의 값을 가져온다.

5. 자원객체를 해제(닫기)

  • JDBC에서는 아래의 3개 자원객체를 닫는 순서가 정해져 있다.
    • 1) ResultSet.close( ) //1순위로 해제
    • 2) PreparedStatement.close( ) //2순위
    • 3) Connection.close( ) //가장 마지막 3순위로 해제

5-1. try-with-resources를 통해 자원 자동 해제

  • try에 자원 객체를 전달하면, try 코드 블록이 끝나면 자동으로 자원을 종료해주는 기능을 수행 한다.
  • 즉, 따로 finally 블록이나 모든 catch 블록에 종료 처리를 하지 않아도 된다.
try(conn; pstmt; rs;) {
 ....
}
  • try-with-resources는 기입한 자원객체의 순서와 반대로 해제된다.
  • 즉, try( ) 내부에 기입한 것처럼 conn → pstmt → rs 순서대로 자원객체가 해제되는 것이 아닌, 반대로 rs → pstmt → conn 자원객체가 해제된다.

0개의 댓글