JDBC-결과 세트

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

ResultSet 오브젝트는 결과 세트의 현재 행을 가리키는 커서를 유지합니다. "결과 세트"라는 용어는 ResultSet 오브젝트에 포함 된 행 및 열 데이터를 나타냅니다.

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

  • Navigational methods: 커서를 이동하는 데 사용됩니다.

  • Get methods: 커서가 가리키는 현재 행의 열에있는 데이터를 보는 데 사용됩니다.

  • Update methods:현재 행의 열에있는 데이터를 업데이트하는 데 사용됩니다. 그런 다음 기본 데이터베이스에서도 업데이트를 업데이트 할 수 있습니다.

커서는 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 상수 중 하나입니다.

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 업데이트 가능한 결과 집합을 만듭니다.

지금까지 작성된 모든 예제는 다음과 같이 작성할 수 있습니다. 이는 Statement 객체를 초기화하여 전진 전용, 읽기 전용 ResultSet 객체를 생성합니다.

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

결과 집합 탐색

ResultSet 인터페이스에는 커서 이동을 포함하는 여러 메소드가 있습니다.

SN 방법 및 설명
1 public void beforeFirst() throws SQLException

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

2 public void afterLast() throws SQLException

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

public boolean first() throws SQLException

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

4 public void last() throws SQLException

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

5 public boolean absolute(int row) throws SQLException

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

6 public boolean relative(int row) throws SQLException

현재 가리키는 위치에서 주어진 행 수만큼 앞뒤로 커서를 이동합니다.

7 public boolean previous() throws SQLException

커서를 이전 행으로 이동합니다. 이 메서드는 이전 행이 결과 집합을 벗어나면 false를 반환합니다.

8 public boolean next() throws SQLException

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

9 public int getRow() throws SQLException

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

10 public void moveToInsertRow() throws SQLException

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

11 public void moveToCurrentRow() throws SQLException

커서가 현재 삽입 행에있는 경우 커서를 현재 행으로 다시 이동합니다. 그렇지 않으면이 메서드는 아무것도하지 않습니다.

더 나은 이해를 위해 Navigate-Example Code를 살펴 보겠습니다 .

결과 세트보기

ResultSet 인터페이스에는 현재 행의 데이터를 가져 오는 수십 개의 메소드가 포함되어 있습니다.

가능한 각 데이터 유형에 대한 get 메소드가 있으며 각 get 메소드에는 두 가지 버전이 있습니다.

  • 열 이름을받는 것.

  • 컬럼 인덱스를받는 것.

예를 들어,보고 싶은 열에 int가 포함 된 경우 ResultSet의 getInt () 메소드 중 하나를 사용해야합니다.

SN 방법 및 설명
1 public int getInt(String columnName) throws SQLException

columnName이라는 열의 현재 행에있는 int를 반환합니다.

2 public int getInt(int columnIndex) throws SQLException

지정된 열 인덱스의 현재 행에있는 int를 반환합니다. 열 인덱스는 1에서 시작합니다. 즉, 행의 첫 번째 열은 1이고 두 번째 열은 2입니다.

마찬가지로 ResultSet 인터페이스에는 8 개의 Java 기본 유형 각각에 대한 get 메소드와 java.lang.String, java.lang.Object 및 java.net.URL과 같은 공통 유형이 있습니다.

SQL 데이터 유형 java.sql.Date, java.sql.Time, java.sql.TimeStamp, java.sql.Clob 및 java.sql.Blob을 가져 오는 메소드도 있습니다. 이러한 SQL 데이터 유형 사용에 대한 자세한 정보는 문서를 확인하십시오.

더 나은 이해를 위해 보기-예제 코드를 살펴 보겠습니다 .

결과 세트 업데이트

ResultSet 인터페이스에는 결과 집합의 데이터를 업데이트하기위한 업데이트 메서드 모음이 포함되어 있습니다.

get 메소드와 마찬가지로 각 데이터 유형에 대해 두 가지 업데이트 메소드가 있습니다.

  • 열 이름을받는 것.

  • 컬럼 인덱스를받는 것.

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

SN방법 및 설명
1public void updateString(int columnIndex, String s) throws SQLException

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

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

열이 인덱스 대신 이름으로 지정된다는 점을 제외하면 이전 방법과 유사합니다.

8 가지 기본 데이터 유형에 대한 업데이트 메소드는 물론 java.sql 패키지에있는 문자열, 객체, URL 및 SQL 데이터 유형이 있습니다.

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

SN 방법 및 설명
1 public void updateRow()

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

2 public void deleteRow()

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

public void refreshRow()

데이터베이스의 최근 변경 사항을 반영하도록 결과 집합의 데이터를 새로 고칩니다.

4 public void cancelRowUpdates()

현재 행의 모든 ​​업데이트를 취소합니다.

5 public void insertRow()

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

더 나은 이해를 위해 업데이트-예제 코드를 살펴 보겠습니다 .