RowSet 객체란?
RowSet은 ResultSet 객체를 감싸는 래퍼(Wrapper)입니다. 데이터베이스에 연결된 상태와 연결 해제된 상태 모두에서 동작할 수 있으며, 직렬화(Serialization)가 가능합니다. 또한 속성(Property)을 설정하는 방식으로 JavaBean 컴포넌트처럼 활용할 수 있고, 네트워크를 통해 객체 자체를 전달하는 것도 가능합니다.
기본적으로 RowSet 객체는 스크롤 가능(scrollable)하고 업데이트 가능(updatable)합니다. 따라서 일반 ResultSet 객체를 양방향 탐색과 데이터 수정이 가능한 형태로 만들고 싶을 때 RowSet을 유용하게 사용할 수 있습니다.
참고로 RowSet에는 대표적으로 두 가지 종류가 있습니다. 데이터베이스와 항상 연결을 유지하는 JdbcRowSet(연결형), 그리고 한 번 데이터를 읽어 온 뒤 연결을 끊고 사용할 수 있는 CachedRowSet(비연결형)입니다. 아래 예제에서 사용하는 것은 연결형인 JdbcRowSet입니다.
RowSet 객체 생성 방법
RowSet 객체는 RowSetProvider.newFactory().createJdbcRowSet() 메서드를 사용하여 생성할 수 있습니다.
RowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
예제
데이터베이스에 다음과 같은 dataset 테이블이 있다고 가정해 보겠습니다.
+--------------+-----------+ | mobile_brand | unit_sale | +--------------+-----------+ | Iphone | 3000 | | Samsung | 4000 | | Nokia | 5000 | | Vivo | 1500 | | Oppo | 900 | | MI | 6400 | | MotoG | 4360 | | Lenovo | 4100 | | RedMi | 4000 | | MotoG | 4360 | | OnePlus | 6334 | +--------------+-----------+
다음 JDBC 예제는 RowSet 객체를 생성한 뒤, 이 객체를 통해 dataset 테이블의 내용을 조회합니다.
import java.sql.DriverManager;
import javax.sql.RowSet;
import javax.sql.rowset.RowSetProvider;
public class RowSetExample {
public static void main(String args[]) throws Exception {
// 드라이버 등록
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// RowSet 객체 생성
RowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
// URL 설정
String mysqlUrl = "jdbc:mysql://localhost/TestDB";
rowSet.setUrl(mysqlUrl);
// 사용자 이름 설정
rowSet.setUsername("root");
// 비밀번호 설정
rowSet.setPassword("password");
// 실행할 쿼리(명령) 설정
rowSet.setCommand("select * from Dataset");
System.out.println("Contents of the table");
while(rowSet.next()) {
System.out.print("Brand: "+rowSet.getString(1)+", ");
System.out.print("Sale: "+rowSet.getString(2));
System.out.println("");
}
}
}실행 결과
Contents of the table Brand: Iphone, Sale: 3000 Brand: Samsung, Sale: 4000 Brand: Nokia, Sale: 5000 Brand: Vivo, Sale: 1500 Brand: Oppo, Sale: 900 Brand: MI, Sale: 6400 Brand: MotoG, Sale: 4360 Brand: Lenovo, Sale: 4100 Brand: RedMi, Sale: 4000 Brand: MotoG, Sale: 4360 Brand: OnePlus, Sale: 6334
위 예제에서 볼 수 있듯이, RowSet은 드라이버 등록부터 URL·계정 정보·쿼리 설정까지 모든 과정을 객체의 setter 메서드로 처리할 수 있어 코드가 간결하고 JavaBean 스타일로 관리하기 좋습니다. 특히 네트워크 전송이나 분산 환경에서 데이터를 주고받아야 하는 경우 RowSet의 직렬화 기능이 큰 장점으로 작용합니다.