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

RowSet 객체란 무엇일까? JDBC 예제 코드로 쉽게 이해하기

RowSet 객체란?

RowSetResultSet 객체를 감싸는 래퍼(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의 직렬화 기능이 큰 장점으로 작용합니다.