제6장 결과 집합 확장기능

내용 목차

6.1. JDBC 2.0 표준
6.1.1. Scrollability, Positioning, Sensitivity
6.1.2. Updatability
6.2. Scrollable, Updatable 결과 집합 생성
6.2.1. Statement 객체 생성
6.2.2. 결과 집합 특성 확인
6.2.3. 제약 사항
6.3. Scrollable 결과 집합 탐색
6.4. Updatable 결과 집합 탐색
6.4.1. INSERT
6.4.2. UPDATE
6.4.3. DELETE

본 장에서는 JDBC 2.0 표준에서 제공하는 기능인 Scrollable, Updatable 결과 집합의 확장기능을 설명한다.

JDBC 2.0 표준에서는 scrollability, positioning, sensitivity, updatability에 대한 확장기능을 제공한다.

  • 결과 집합 타입에 의해 scrollability, positioning, sensitivity가 결정된다.

  • 동시성 타입에 의해 updatability가 결정된다.

다음은 Scrollable 결과 집합을 위해 제공되는 메소드로, 새로운 위치로 이동할 수 있다.

메소드설명
boolean next() throws SQLException현재 위치에서 다음 열로 이동한다. 만약 더는 다음 열이 존재하지 않는 경우 false를 반환한다.
boolean previous() throws SQLException현재 위치에서 이전 열로 이동한다. 만약 더는 이전 열이 존재하지 않는 경우 false를 반환한다.
boolean first() throws SQLException결과 집합의 첫 번째 열로 이동한다. 만약 열 데이터가 하나도 없을 경우 false를 반환한다.
boolean last() throws SQLException결과 집합의 마지막 열로 이동한다. 만약 열 데이터가 하나도 없을 경우 false를 반환한다.
boolean absolute(int row) throws SQLException

결과 집합의 처음이나 마지막 열의 위치에서부터 정해진 값만큼 절대 위치로 이동한다. 만약 입력 값이 양수인 경우에는 처음 열부터 정방향으로 이동하고, 음수인 경우에는 마지막 열부터 역방향으로 이동한다.

만약 결과 집합의 개수보다 더 큰 양수 값을 사용할 경우에는 마지막 열 다음으로 이동하며, 이는 afterLast()와 같은 효과를 가진다. 마찬가지로 결과 집합의 개수보다 더 큰 음수 값을 사용할 경우에는 beforeFirst()와 같은 효과를 가진다.

boolean relative(int row) throws SQLException

현재 열의 위치로부터 시작하여 양수 값이면 정방향으로 이동하고, 음수 값이면 역방향으로 이동한다. 만약 결과 집합의 개수보다 더 큰 양수 값을 사용할 경우에는 마지막 열 다음으로 이동하며, 이는 afterLast()와 같은 효과를 가진다. 마찬가지로 결과 집합의 개수보다 더 큰 음수 값을 사용한 경우에는 beforeFirst()와 같은 효과를 가진다.

주의할 점은 반드시 현재 열의 위치가 적절해야 한다는 것이다. 처음 열의 위치 이전이나 마지막 열의 위치 다음에서부터 상대 위치로의 이동은 할 수 없으며, SQLException을 발생시킨다.

void beforeFirst() throws SQLException결과 집합의 첫 번째 열 이전으로 이동한다. 이는 정방향으로 결과 집합을 탐색할 때의 상태이며 바로 사용할 수 있는 열 데이터는 없다.
void afterLast() throws SQLException결과 집합의 마지막 열 다음으로 이동한다. 이는 역방향으로 결과 집합을 탐색할 때의 상태이며 바로 사용할 수 있는 열 데이터는 없다.

현재의 위치 정보를 알기 위해 tbJDBC에서는 다음과 같은 메소드를 제공한다.

메소드설명
int getRow() throws SQLException현재 열의 위치를 반환하며, 적합한 열의 위치가 아닌 경우에는 0을 반환한다.
boolean isFirst() throws SQLException현재 열의 위치가 첫 번째 열인지 확인한다.
boolean isLast() throws SQLException현재 열의 위치가 마지막 열인지 확인한다.
boolean isBeforeFirst() throws SQLException현재 열의 위치가 첫 번째 열의 이전 열인지 확인한다.
boolean isAfterLast() throws SQLException현재 열의 위치가 마지막 열의 다음 열인지 확인한다.

사용자는 Updatable 결과 집합을 이용하여 열의 데이터를 업데이트할 수 있고, 삭제할 수도 있으며, 새로운 열의 데이터를 입력할 수도 있다.

UPDATE나 INSERT를 수행한 후에는 반드시 별도의 단계를 거쳐 데이터베이스에 변경 사항을 반영해야 한다. 그렇지 않으면 변경된 모든 데이터는 소멸된다. 반면에 DELETE를 수행한 경우에는 별도의 단계 없이 즉시 데이터베이스에 반영된다.