JDBC ResultSet

하루·2025년 10월 13일

JAVA

목록 보기
4/8

!

Result set

ResultSet은 JDBC에서 SELECT 쿼리 결과를 테이블 형태로 저장하고, 각 행과 열의 데이터를 순차적으로 읽어올 수 있도록 하는 객체이다.

  • executeQuery() 호출시 반환된다.
  • 내부 커서가 있으며, next()과 같은 메서드를 사용해서 탐색한다. (이때, next()는 다음 행이 있으면 True를 반환하고, 없으면 False를 반환하기에 While 문을 사용해서 전체 탐색을 할 수 있다.)
  • get타입 메서드(getString(), getInt())를 통해서 각 행의 컬럼 값을 읽을 수 있다.
  • 업데이트도 UpdateRow, InsertRow을 통해서 가능하긴 하다.
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()을 통해서 자원을 반환한다.
  • ResultSet 관련 작업은 SQLException이 자주 발생하므로, 예외 처리를 반드시 해주어야 한다.
  • 대용량 데이터 조회 시, ResultSet을 오래 열어두면 메모리 사용량이 급증할 수 있다 => 필요한 데이터만 조회하거나, 페이징 처리 등을 고려해야 한다.

ResultSet 종류

result set에는 3가지 종류가 있다.

  1. Scrollability : 위아래로 움직일 수 있느냐를 결정
  • TYPE_FOWARD_ONLY : 커서를 앞으로만 이동 가능 (기본값)
  • TYPE_SCROLL_INSENSITIVE :위아래 커서 이동 가능하지만, DB 변경 사항은 반영되지 않음
  • TYPE_SCROLL_SENSITIVE :위아래 이동 가능하며, DB 변경 사항이 반영됨

    단순 조회, 한방향 읽기 -> TYPE_FOWARD_ONLY
    사용자 스크롤, 페이지 이동 등 임의 접근 가능해야 할 때 -> TYPE_SCROLL_INSENSITIVE
    실시간 데이터 변동 반영이 필요할 때 -> TYPE_SCROLL_SENSITIVE

  1. Concurrency : update 할 수 있느냐
  • CONCUR_READ_ONLY : 읽기 전용 (기본값)
  • CONCUR_UPDATABLE : ResultSet을 통해 직접 데이터 수정 가능

    수정 작업을 resultset에서 하고 싶을 때 -> CONCUR_UPDATABLE

  1. Holdability : transaciont이 끝나면?
  • HOLD_CURSORS_OVER_CIMMIT : 트랜잭션 커밋 후에도 ResultSet 유지
  • CLOSE_CURSORS_AT_COMMIT : 커밋 시 ResultSet 자동 닫힘

    한 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

0개의 댓글