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 | 방법 및 설명 |
---|---|
1 | public 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()
데이터베이스에 행을 삽입합니다. 이 메서드는 커서가 삽입 행을 가리키는 경우에만 호출 할 수 있습니다. |
더 나은 이해를 위해 업데이트-예제 코드를 살펴 보겠습니다 .