English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC 결과 집합(ResultSet)

데이터베이스에서 데이터를 읽는 SQL 문장은 결과 집합에 대한 데이터를 반환합니다. SELECT 문은 데이터베이스에서 행을 선택하고 결과 집합에서 확인하는 표준 방법입니다. Sql.ResultSet 인터페이스는 데이터베이스 쿼리의 결과 집합을 나타냅니다.

ResultSet 객체는 결과 집합 중 현재 행을 가리키는 커서를 유지합니다. '결과 집합(result set)'라는 용어는 ResultSet 객체에 포함된 행과 열 데이터를 의미합니다.

ResultSet 인터페이스의 메서드는 세 가지 유형으로 나눌 수 있습니다.-

  • 탐색 메서드: 커서를 왼쪽과 오른쪽으로 이동하는 데 사용됩니다.

  • Get 메서드: 커서가 지시하는 현재 행의 열에 대한 데이터를 확인하는 데 사용됩니다.

  • Update 메서드:현재 행의 각 열에 대한 데이터를 업데이트하는 데 사용됩니다. 그런 다음, 업데이트는 기본 데이터베이스에서도 업데이트될 수 있습니다.

커서는 ResultSet의 속성에 따라 이동할 수 있습니다. 이 속성은 해당 ResultSet을 생성하는 Statement을 생성할 때 지정됩니다.

JDBC는 필요한 ResultSet을 가진 문장을 생성하기 위해 다음과 같은 연결 방법을 제공합니다.-

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

첫 번째 매개변수는 ResultSet 객체의 타입을 나타내며, 두 번째 매개변수는 ResultSet 상수 중 하나로, 결과 집합이 읽기 전용인지 갱신 가능인지를 지정합니다.

결과 집합의 타입

가능한 RSType는 다음과 같습니다. ResultSet 타입을 지정하지 않으면 자동으로 TYPE_FORWARD_ONLY 타입의 결과 집합을 얻습니다.

타입설명
ResultSet.TYPE_FORWARD_ONLY

커서는 결과 집합에서만 앞으로 이동할 수 있습니다.

ResultSet.TYPE_SCROLL_INSENSITIVE

커서는 앞으로와 뒤로 스크롤할 수 있으며, 결과 집합은 다른 사람이 결과 집합을 생성한 후 데이터베이스에 대한 변경에 대한 취약하지 않습니다.

ResultSet.TYPE_SCROLL_SENSITIVE.

커서는 앞으로와 뒤로滚动할 수 있으며, 결과 집합은 다른 사람이 결과 집합을 생성한 후 데이터베이스에 대한 변경에 매우 민감합니다.

ResultSet의 동기화

가능한 RSConcurrency는 다음과 같습니다. 어떤 동기화 유형을 지정하지 않으면 자동으로 CONCUR_READ_ONLY 유형을 얻습니다.

동기화설명
ResultSet.CONCUR_READ_ONLY

읽기 전용 결과 집합을 생성합니다. 기본 값입니다

ResultSet.CONCUR_UPDATABLE

업데이트 가능한 결과 집합을 생성합니다.

지금까지 우리가 작성한 모든 예제는 다음과 같이 작성할 수 있습니다. 이 예제는 읽기 전용 ResultSet 객체를 생성하기 위해 Statement 객체를 초기화합니다.-

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

결과 집합 탐색

ResultSet 인터페이스에는 커서 이동에 관련된 여러 가지 메서드가 있습니다., 포함하여-

순번메서드 및 설명
1public void beforeFirst() throws SQLException

커서를 첫 번째 행 앞으로 이동합니다.

2public void afterLast() throws SQLException

커서를 마지막 행 뒤로 이동합니다.

3public boolean first() throws SQLException

커서를 첫 번째 행으로 이동합니다.

4public void last() throws SQLException

커서를 마지막 행으로 이동합니다.

5public boolean absolute(int row) throws SQLException

커서를 지정된 행으로 이동합니다.

6public boolean relative(int row) throws SQLException

커서를 지정된 행 수만큼 앞으로 또는 뒤로 이동합니다. 현재 위치에서 이동합니다.

7public boolean previous() throws SQLException

커서를 이전 행으로 이동합니다. 이전 행이 결과 집합에 없으면 이 메서드는 false를 반환합니다.

8public boolean next() throws SQLException

커서를 다음 행으로 이동시킵니다. 결과 집합에 더 이상 행이 없으면 이 메서드는 false를 반환합니다.

9public int getRow() throws SQLException

커서가 가리키는 행 번호를 반환합니다.

10public void moveToInsertRow() throws SQLException

커서를 결과 집합의 특정 행으로 이동시킵니다. 이 행은 데이터베이스에 새 행을 삽입하는 데 사용할 수 있습니다. 현재 커서 위치를 기억하세요.

11public void moveToCurrentRow() throws SQLException

커서가 현재 행에 위치한 경우, 커서를 현재 행으로 이동시킵니다; 그렇지 않으면 이 메서드는 어떤 작업도 수행하지 않습니다.

이해하기 쉽게 하기 위해, 다음을 연구해 보겠습니다 "이동-예제 코드

결과 집합 보기

ResultSet 인터페이스는 현재 행 데이터를 가져오는 여러 가지 메서드를 포함하고 있습니다.

모든 가능한 데이터 타입에는 get 메서드가 있으며, 각 get 메서드에는 두 가지 버전이 있습니다.-

  • 컬럼 이름을 가진 컬럼.

  • 컬럼 인덱스를 가진 인덱스.

예를 들어, 관심 있는 열이 int를 포함하고 있다면, ResultSet의 getInt() 메서드 중 하나를 사용해야 합니다.

순번메서드 및 설명
1public int getInt(String columnName) throws SQLException

이름이 columnName인 컬럼에서 현재 행의 int 값을 반환합니다.

2public int getInt(int columnIndex) throws SQLException

지정된 컬럼 인덱스에서 현재 행의 정수 값을 반환합니다. 컬럼 인덱스는1시작하면, 이는 행의 첫 번째 열이 됩니다.1그런 다음.2그런 다음.

또한 ResultSet 인터페이스에서는, 여덟 가지 Java 기본 타입의 각 타입과 일반적인 타입(예: java.lang.String, java.lang.Object, java.net.URL)에 대해 get 메서드가 있습니다.

또한 java.sql.Date, java.sql.Time, java.sql.Timestamp, java.sql.Clob, java.sql.Blob와 같은 SQL 데이터 타입을 가져오는 메서드가 몇 가지 있습니다. 이러한 SQL 데이터 타입의 사용에 대한更多信息를 얻기 위해 문서를 확인하세요.

이해하기 위해, 다음을 연구해 보겠습니다.보기-예제 코드

결과 집합 업데이트

ResultSet 인터페이스는 결과 집합 데이터를 업데이트하는 메서드의 집합을 포함하고 있습니다.

get 메서드와 마찬가지로, 각 데이터 타입에는 두 가지 업데이트 메서드가 있습니다.-

  • 컬럼 이름을 가진 컬럼.

  • 컬럼 인덱스를 가진 인덱스.

예를 들어, 결과 집합의 현재 행의 String 열을 업데이트하려면 다음 updateString() 메서드 중 하나를 사용할 수 있습니다.-

순번메서드 및 설명
1public void updateString(int columnIndex, String s) throws SQLException

지정된 열의 String을 s의 값으로 변경합니다.

2public void updateString(String columnName, String s) throws SQLException

이전 메서드와 유사하지만, 열은 인덱스 대신 이름을 통해 지정됩니다.

java.sql 패키지에는 String, Object, URL 및 SQL 데이터 타입뿐만 아니라 8가지 원시 데이터 타입의 업데이트 메서드가 있습니다.

ResultSet에 일행을 업데이트하면 ResultSet 객체에서 현재 행의 열이 변경되지만, 기본 데이터베이스의 행은 변경되지 않습니다. 데이터베이스의 행에 대한 변경 사항을 업데이트하려면 다음 메서드 중 하나를 호출해야 합니다.

순번메서드 및 설명
1public void updateRow()

현재 행을 업데이트하여 데이터베이스에서 해당 행을 업데이트합니다.

2public void deleteRow()

현재 행을 데이터베이스에서 제거합니다.

3public void refreshRow()

최근에 데이터베이스에서 이루어진 모든 변경 사항을 반영하여 결과 집합의 데이터를 새로 고칩니다.

4public void cancelRowUpdates()

현재 행에 대해 이루어진 모든 업데이트를 취소합니다.

5public void insertRow()

데이터베이스에 한 행을 삽입합니다. 커서가 삽입 행을 가리키고 있을 때만 이 메서드를 호출할 수 있습니다.

이해하기 쉽게 하기 위해, 다음을 연구해 보겠습니다 "예제 코드 업데이트