웹 백엔드/개념정리

개념 정리9 - 행의 출력 순서를 결정(ResultSet에서 커서를 이동하는 주요 메서드들)

Blue_bull 2025. 1. 22. 08:31

next()가 아닌 다른 메서드를 사용하면 ResultSet의 데이터 접근 순서를 다르게 할 수 있다.
next()ResultSet의 커서를 한 행씩 순차적으로 이동시키면서 데이터를 읽는 방식이지만, 다른 커서 이동 메서드를 사용하면 행 순서가 달라질 가능성이 있습니다.


ResultSet에서 커서를 이동하는 주요 메서드들

  1. next()

    • 커서를 현재 행에서 다음 행으로 이동합니다.
    • 일반적으로 while (rs.next()) 구조에서 사용되며, 데이터베이스의 행을 순서대로 읽어옵니다.
  2. previous()

    • 커서를 현재 행에서 이전 행으로 이동합니다.
    • TYPE_SCROLL_SENSITIVE 또는 TYPE_SCROLL_INSENSITIVE와 같은 스크롤 가능한 ResultSet에서만 사용 가능합니다.
    • 행을 역순으로 처리할 때 사용될 수 있습니다.
  3. absolute(int row)

    • 커서를 지정된 행 번호로 직접 이동합니다.
    • 행 번호는 1부터 시작하며, 음수 값을 사용하면 끝에서부터 계산됩니다.
      • 예: absolute(1) → 첫 번째 행.
      • 예: absolute(-1) → 마지막 행.
  4. relative(int rows)

    • 현재 행을 기준으로 커서를 상대적으로 이동합니다.
    • 예: relative(2) → 현재 위치에서 두 행 앞으로 이동.
    • 예: relative(-1) → 현재 위치에서 한 행 뒤로 이동.
  5. first()

    • 커서를 첫 번째 행으로 이동합니다.
  6. last()

    • 커서를 마지막 행으로 이동합니다.
  7. beforeFirst()

    • 커서를 첫 번째 행 이전으로 이동합니다.
    • 초기 상태로 되돌릴 때 유용합니다.
  8. 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 유형을 스크롤 가능하게 설정해야 합니다.