웹 백엔드/개념정리
개념 정리9 - 행의 출력 순서를 결정(ResultSet에서 커서를 이동하는 주요 메서드들)
Blue_bull
2025. 1. 22. 08:31
next()
가 아닌 다른 메서드를 사용하면 ResultSet
의 데이터 접근 순서를 다르게 할 수 있다.next()
는 ResultSet
의 커서를 한 행씩 순차적으로 이동시키면서 데이터를 읽는 방식이지만, 다른 커서 이동 메서드를 사용하면 행 순서가 달라질 가능성이 있습니다.
ResultSet
에서 커서를 이동하는 주요 메서드들
next()
- 커서를 현재 행에서 다음 행으로 이동합니다.
- 일반적으로
while (rs.next())
구조에서 사용되며, 데이터베이스의 행을 순서대로 읽어옵니다.
previous()
- 커서를 현재 행에서 이전 행으로 이동합니다.
TYPE_SCROLL_SENSITIVE
또는TYPE_SCROLL_INSENSITIVE
와 같은 스크롤 가능한ResultSet
에서만 사용 가능합니다.- 행을 역순으로 처리할 때 사용될 수 있습니다.
absolute(int row)
- 커서를 지정된 행 번호로 직접 이동합니다.
- 행 번호는 1부터 시작하며, 음수 값을 사용하면 끝에서부터 계산됩니다.
- 예:
absolute(1)
→ 첫 번째 행. - 예:
absolute(-1)
→ 마지막 행.
- 예:
relative(int rows)
- 현재 행을 기준으로 커서를 상대적으로 이동합니다.
- 예:
relative(2)
→ 현재 위치에서 두 행 앞으로 이동. - 예:
relative(-1)
→ 현재 위치에서 한 행 뒤로 이동.
first()
- 커서를 첫 번째 행으로 이동합니다.
last()
- 커서를 마지막 행으로 이동합니다.
beforeFirst()
- 커서를 첫 번째 행 이전으로 이동합니다.
- 초기 상태로 되돌릴 때 유용합니다.
afterLast()
- 커서를 마지막 행 다음으로 이동합니다.
출력 순서가 달라질 수 있는 경우
next()
만 사용하는 경우:- 기본적으로 행은 순차적으로 출력됩니다.
absolute()
또는relative()
를 사용하는 경우:- 커서를 특정 행으로 이동하므로, 임의의 순서로 행이 출력될 수 있습니다.
last()
→previous()
를 사용하는 경우:- 행을 역순으로 출력할 수 있습니다.
예제 1: next()
(순차 출력)
while (rs.next()) {
System.out.println(rs.getString("name"));
}
출력 (순서대로):
Alice
Bob
Charlie
예제 2: last()
→ previous()
(역순 출력)
if (rs.last()) { // 커서를 마지막 행으로 이동
do {
System.out.println(rs.getString("name"));
} while (rs.previous()); // 역방향으로 이동
}
출력 (역순):
Charlie
Bob
Alice
예제 3: absolute()
(특정 행 접근)
if (rs.absolute(2)) { // 두 번째 행으로 이동
System.out.println(rs.getString("name"));
}
출력 (두 번째 행만):
Bob
결론
next()
를 사용하면 순차적으로 행을 읽어 출력됩니다.- 다른 커서 이동 메서드(
previous()
,absolute()
,relative()
, 등)를 사용하면 데이터 접근 순서가 달라질 수 있습니다. - 출력 순서를 제어하려면 적절한 커서 이동 메서드를 선택해야 합니다.
단, ResultSet
의 기본 유형이 TYPE_FORWARD_ONLY
인 경우에는 next()
만 사용할 수 있으며, 다른 커서 이동 메서드는 사용할 수 없습니다. 이 경우, ResultSet
유형을 스크롤 가능하게 설정해야 합니다.