!
ResultSet은 JDBC에서 SELECT 쿼리 결과를 테이블 형태로 저장하고, 각 행과 열의 데이터를 순차적으로 읽어올 수 있도록 하는 객체이다.
executeQuery() 호출시 반환된다.ResultSet rs = stmt.executeQuery("SELECT name, age FROM users");
while(rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(name + " : " + age);
}
rs.close()을 통해서 자원을 반환한다.result set에는 3가지 종류가 있다.
단순 조회, 한방향 읽기 ->
TYPE_FOWARD_ONLY
사용자 스크롤, 페이지 이동 등 임의 접근 가능해야 할 때 ->TYPE_SCROLL_INSENSITIVE
실시간 데이터 변동 반영이 필요할 때 ->TYPE_SCROLL_SENSITIVE
수정 작업을 resultset에서 하고 싶을 때 ->
CONCUR_UPDATABLE
한 resultset에서 여러 트랜잭션을 해야할 때 ->
HOLD_CURSORS_OVER_COMMIT
커밋마다 리소스 정리 ->HOLD_CURSORS_AT_COMMIT
위의 종류들은 Statement 또는 Prepared Statement 생성시에 설정한다.
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE,
ResultSet.HOLD_CURSORS_OVER_COMMIT
);
PreparedStatement pstmt = conn.prepareStatement(
"SELECT * FROM users",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY
);
설정을 하지 않으면, 다음과 같은 기본 값이 적용된다.
Scrollability: TYPE_FORWARD_ONLY
Concurrency: CONCUR_READ_ONLY
Holdability: 드라이버 및 DBMS에 따라 다르지만, 보통 CLOSE_CURSORS_AT_COMMIT