Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

JDBC 프로그램에서 ResultSet을 탐색하는 방법 완벽 가이드

JDBC에서 데이터베이스 조회 결과를 다룰 때 ResultSet 객체의 탐색 방법을 이해하는 것은 매우 중요합니다. 이 글에서는 next()와 previous() 메서드를 활용해 ResultSet을 순방향 및 역방향으로 탐색하는 방법과, 각 행의 컬럼 값을 읽어오는 getter 메서드 사용법까지 자세히 알아보겠습니다.

next() 메서드로 순방향 탐색하기

ResultSet 인터페이스의 next() 메서드는 현재 위치에서 커서(포인터)를 다음 행으로 이동시킵니다. 이 메서드는 boolean 값을 반환하며, 다음 행이 존재하면 true를, 더 이상 행이 없으면 false를 반환합니다.

따라서 while 루프 안에서 이 메서드를 사용하면 ResultSet 객체의 모든 내용을 손쉽게 반복(iterate)할 수 있습니다.

while(rs.next()){
}

각 레코드의 컬럼 값 가져오기

ResultSet 인터페이스는 행(row)의 각 컬럼 값을 조회할 수 있는 getter 메서드(getXXX())도 제공합니다. 각 getter 메서드는 두 가지 형태로 오버로딩되어 있습니다.

  • getXXX(int columnIndex): 컬럼의 인덱스를 나타내는 정수값을 받아 해당 컬럼의 값을 반환합니다.

  • getXXX(String columnLabel): 컬럼의 이름을 나타내는 문자열을 받아 해당 컬럼의 값을 반환합니다.

컬럼 값의 데이터 타입에 맞는 getter 메서드를 사용해야 합니다. 예를 들어 문자열 컬럼에는 getString(), 정수형 컬럼에는 getInt()를 사용하는 식입니다.

while(rs.next()) {
   System.out.print("Brand: "+rs.getString("Column_Name")+", ");
   System.out.print("Sale: "+rs.getString("Column_Name"));
   ………………………
   ………………………
   System.out.println("");
}

previous() 메서드로 역방향 탐색하기

양방향(bi-directional) 스크롤이 가능한 ResultSet 객체라면 previous() 메서드를 사용해 역방향으로도 탐색할 수 있습니다.

주의할 점은 ResultSet 객체의 커서가 기본적으로 첫 번째 행 바로 앞(before first row)에 위치한다는 것입니다. 따라서 역방향으로 탐색하려면 먼저 afterLast() 메서드를 호출해 커서를 마지막 행 다음으로 이동시킨 후, previous() 메서드로 거꾸로 순회해야 합니다.

rs.afterLast();

System.out.println("Contents of the table");
while(rs.previous()) {
   System.out.print("Brand: "+rs.getString("Mobile_Brand")+", ");
   System.out.print("Sale: "+rs.getString("Unit_Sale"));
   System.out.println("");
}

참고 사항

역방향 탐색(previous(), afterLast() 등)을 사용하려면 Statement 생성 시 스크롤 타입을 TYPE_SCROLL_INSENSITIVE 또는 TYPE_SCROLL_SENSITIVE로 지정해야 합니다. 예를 들면 다음과 같습니다.

Statement stmt = con.createStatement(
   ResultSet.TYPE_SCROLL_INSENSITIVE,
   ResultSet.CONCUR_READ_ONLY);

이처럼 JDBC의 ResultSet은 next()로 순방향 탐색을, previous()와 afterLast()를 조합해 역방향 탐색을 지원하며, 상황에 맞게 활용하면 데이터 처리 로직을 훨씬 유연하게 구성할 수 있습니다.