[JDBC] ResultSet란

데이터베이스 쿼리에서 데이터를 읽어들이는 SQL문은 ResultSet에서 데이터를 반환합니다. select 문은 데이터베이스에서 행을 선택하고 결과 집합으로 볼 수 있는 표준 방법입니다. ResultSet은 데이터베이스 쿼리의 결과 집합을 나타냅니다.

ResultSet 객체는 현재 행을 가리키는 커서를 유지합니다.

ResultSet 인터페이스의 메서드는 3가지 범주로 나눌 수 있습니다.

  • 탐색 메서드 : 커서를 이동하는 데 사용됩니다.
  • 가져오기 메서드 : 커서가 가리키는 현재 행의 열 데이터를 보는 데 사용됩니다.
  • 업데이트 메서드 : 커서가 가리키는 현재 행의 열 데이터를 업데이트하는 데 사용됩니다.

커서는 ResultSet의 속성에 따라 이동할 수 있습니다. 이러한 속성은 Statement가 생성될 때 지정됩니다.

JDBC는 원하는 ResultSet을 생성하기 위해 다음과 같은 연결 메서드를 제공합니다.

  • createStatement(int RSType, int RSConcurrency)
  • prepareStatement(String SQL, int RSType, int RSConcurrency)
  • prepareCall(String SQL, int REType, int RSConcurrency)

RSType은 ResultSet 객체의 유형을 나타내고, RSConcurrency는 읽기 전용 또는 업데이트 가능 여부를 지정합니다.

ResultSet의 유형

유형을 지정하지 않으면 자동으로 TYPE_FORWARD_ONLY가 됩니다.

  • ResultSet.TYPE_FORWARD_ONLY : 커서는 결과 집합에서 앞으로만 이동할 수 있습니다.
  • ResultSet.TYPE_SCROLL_INSENSITIVE: 커서는 앞으로와 뒤로 스크롤할 수 있으며, 결과 집합이 생성된 후 데이터베이스에 다른 사람들이 변경한 사항에 민감하지 않습니다.
  • ResultSet.TYPE_SCROLL_SENSITIVE: 앞으로 뒤로 스크롤할 수 있으며, 다른 사람들이 변경한 사항에 민감합니다.

ResultSet의 동시성

동시성 유형을 지정하지 않으면 자동으로 CONCUR_READ_ONLY가 됩니다.

  • ResultSet.CONCUR_READ_ONLY: 읽기 전용 결과 집합을 생성합니다.
  • ResultSet.CONCUR_UPDATEABLE: 업데이트 가능한 결과 집합을 생성합니다.
try {
   Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   // ...
}
finally {
   // ...
}

커서 이동 메서드

  • beforeFirst() : 커서를 첫 번째 행 바로 앞에 이동합니다.
  • afterlast(): 커서를 마지막 행 바로 뒤로 이동합니다.
  • first() : 커서를 첫번째 행으로 이동합니다.
  • last() : 커서를 마지막 행으로 이동합니다.
  • absolute(int now): 커서를 지정된 행으로 이동합니다.
  • relative(int row): 현재 위치에서 주어진 수의 행 앞으로 또는 뒤로 커서를 이동합니다.
  • previous(): 커서를 이전 행으로 이동합니다. 이전 행이 결과 집합을 벗어나면 false를 반환합니다.
  • next(): 커서를 다음 행으로 이동합니다.
  • getRow() 커서가 가리키는 행 번호를 반환합니다.
  • moveToInsertRow() : 데이터베이스에 새 행을 삽입할 수 있는 특별한 행으로 커서를 이동합니다.
  • moveToCurrentRow(): 커서가 현재 삽입 행에 있으면 커서를 현재 행으로 되돌립니다.

ResultSet 결과 보기

현재 행의 데이터를 가져오기 위한 여러 메서드가 포함되어 있습니다.

각 데이터 타입에 대한 get 메서드가 있으며 2가지로 가져올 수 있습니다.

1. 열 이름을 인수로 받는 메서드

2. 열 인덱스를 인수로 받는 메서드

// 열 이름을 사용
public int getInt(String columnName) throws SQLException

// 열 인덱스를 사용
public int getInt(int columnIndex) throws SQLException

ResultSet 업데이트

get과 마찬가지로 update 2가지로 할수있습니다.

// 열 인덱스를 사용
public void updateString(int columnIndex, String s) throws SQLException

// 열 이름을 사용
public void updateString(String columnName, String s) throws SQLException

ResultSet 객체의 현재 행의 값은 변경되지만 데이터베이스에는 반영되지 않습니다.

데이터베이스에도 행의 변경 사항을 업데이트하려면 다음 메서드 중 하나를 호출해야 합니다.

  • updateRow() : 현재 행을 업데이트하여 데이터베이스의 해당 행을 업데이트합니다.
  • deleteRow() : 데이터베이스의 현재 행을 삭제합니다.
  • refreshRow() : 데이터베이스에 최근 변경 사항을 반영하기 위한 새로고침
  • cancelRowUpdates() : 현재 행에서 수행된 업데이트를 취소합니다.
  • insertRow() - 데이터베이스에 행을 삽입합니다.

'Databases > JDBC' 카테고리의 다른 글

[JDBC] Transactions 사용법  (0) 2024.07.05
[JDBC] Data Types  (0) 2024.07.05
[JDBC] Statements, PreparedStatement and CallableStatement  (0) 2024.07.05
[JDBC] 데이터베이스 연결 설정  (1) 2024.07.05
[JDBC] Driver Types  (0) 2024.07.05