본문 바로가기
Java

[JAVA] Chapter 10. JDBC 프로그래밍 절차

by nyeoo 2023. 12. 7.

1. 드라이버 로딩

  • Class.forName();
  • Oracle Driver 를 JAVA 에서 사용하기 위해 드라이버를 JVM 에 로딩하는 과정 => 사용할 드라이브를 확인하는 작업

2. 커넥션 할당받기

  • DriverManager.getConnection(); => 수레가 지나다닐 선로(줄) 작업을 하는 것

3. 쿼리문 전송을 위한 작업 객체 할당받기

  • Statement 또는 PreparedStatement 할당받기
  • conn.createStatement(); 또는 conn.preparedStatement(); => 커넥션을 기반으로 수레를 매다는 작업을 수행함 / 다른작업객체

💡 Connection 은 줄, Statement 는 수레에 비유할 수 있음

4. 작업 객체를 활용하여 쿼리문 전송

DML(insert, update, delete)문인 경우

  • int updateCount = stmt.executeUpdate(sql);
  • 영향받은 레코드 수(적용된 행의 갯수) 반환

select 문인 경우

  • ResultSet rs = stmt.executeQuery(sql);
  • 결과 집합 형태로 ResultSet 반환 (다중일수도 단일컬럼일수도 있으므로, 일괄적으로 ResultSet 형태로 보냄. 긴 필름형태로 되어있음)

→ 선택적으로 executeUpdate(오라클에 전달하고보니 DB상에서 변화가 있을 때) 메소드, executeQuery(DB의 변화가 없을 때) 메소드를 사용

 

⚠️ executeQuery() 메소드를 사용하면 질의 결과를 ResultSet 객체로 가져올 수 있지만, ResultSet 객체가 질의에 대한 결과물 모두를 한꺼번에 갖고 있는 구조는 아님. 단지 데이터베이스로부터 획득한 질의 결과물에 대한 관리가 가능한 상태가 되는 것이므로, ResultSet 을 얻었다고 해서 데이터베이스와의 연결을 끊게 되면 ResultSet 객체는 더 이상 질의 결과를 관리할 수 없게 됨을 주의 ==> 필요한 것들을 변수에 담는 등 다 꺼내서 사용했을 때 연결을 끊기

5. (select 구문의 경우만)

  • ResultSet 의 논리적 커서 이동을 통해 각 컬럼의 데이터를 바인딩해 온다.
  • boolean b = rs.next();
  • 커서 이동. 커서가 위치한 지점에 레코드가 존재하면 true 를 반환, 없으면 false 를 반환. 커서는 가장 선두 첫 번째 레코드의 직전에 위치하고 있다가 『next()』 가 호출되면 진행

6. 사용을 마친 리소스 반납

  • rs.close(); → ResultSet 사용했을 경우
  • stmt.close(); → Statement 사용했을 경우
  • DBConn.close(); → null 체크하여 close() 해 주는 것을 권장. finally 블럭에서 구현하는 것을 권장