데이터베이스 쿼리에서 데이터를 읽어들이는 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 |