2025. 4. 6. 19:50ㆍHigh Level Programming Language/JDBC Database Access
RowSet 객체 사용하기
JDBC의 RowSet 객체는 ResultSet보다 더 유연하고 사용하기 쉬운 방식으로 테이블 형태의 데이터를 보관합니다.
Oracle은 RowSet의 보다 일반적인 용도를 위해 다섯 가지 RowSet 인터페이스를 정의했으며, 이 RowSet 인터페이스에 대한 표준 레퍼런스 구현도 제공하고 있습니다. 본 튜토리얼에서는 이러한 레퍼런스 구현을 사용하는 방법을 배우게 됩니다.
이들 RowSet 인터페이스 버전과 그 구현체는 프로그래머의 편의를 위해 제공된 것입니다. 프로그래머는 javax.sql.RowSet 인터페이스에 대한 자신의 버전을 작성하거나, 다섯 가지 RowSet 인터페이스 구현을 확장하거나, 자신만의 구현을 작성할 수 있습니다. 하지만 대부분의 경우, 표준 레퍼런스 구현만으로도 충분하므로 이를 그대로 사용할 수 있습니다.
이 절에서는 RowSet 인터페이스와 이를 확장하는 다음과 같은 인터페이스를 소개합니다:
- JdbcRowSet
- CachedRowSet
- WebRowSet
- JoinRowSet
- FilteredRowSet
다음 주제를 다룹니다:
- RowSet 객체는 무엇을 할 수 있는가?
- RowSet 객체의 종류
RowSet 객체는 무엇을 할 수 있는가?
모든 RowSet 객체는 ResultSet 인터페이스로부터 파생되었으므로 ResultSet이 가진 기능을 공유합니다. JDBC의 RowSet 객체가 특별한 이유는 다음과 같은 기능이 추가되었기 때문입니다:
- 자바빈(JavaBeans) 컴포넌트로 작동
- 스크롤 가능성 및 수정 가능성 추가
자바빈(JavaBeans) 컴포넌트로 작동
모든 RowSet 객체는 JavaBeans 컴포넌트입니다. 이는 다음을 의미합니다:
- 속성(Properties)
- JavaBeans 알림 메커니즘(Event Notification Mechanism)
속성
모든 RowSet 객체는 속성을 가집니다. 속성이란, getter 및 setter 메서드가 있는 필드입니다. 속성은 JDveloper나 Eclipse 같은 IDE에 포함된 빌더 도구를 통해 시각적으로 조작할 수 있습니다. 자세한 내용은 JavaBeans 학습 자료 중 Properties 항목을 참고하세요.
JavaBeans 알림 메커니즘
RowSet 객체는 JavaBeans 이벤트 모델을 사용합니다. 이 모델에서는 특정 이벤트가 발생하면 등록된 컴포넌트들에게 알림이 전송됩니다. 모든 RowSet 객체에서 다음 세 가지 이벤트가 알림을 유발합니다:
- 커서 이동
- 행의 업데이트, 삽입 또는 삭제
- RowSet 전체의 변경
이벤트 알림은 RowSetListener
인터페이스를 구현하고, RowSet 객체에 리스너로 등록된 모든 구성 요소에게 전송됩니다.
예를 들어 리스너가 막대 그래프 같은 GUI 컴포넌트라면, RowSet의 데이터 변경 시 새 값을 받아야 하므로 리스너로 등록됩니다. 리스너는 RowSetListener
메서드를 구현하여 특정 이벤트 발생 시 어떤 동작을 할지 정의하고, 다음과 같이 RowSet 객체에 리스너로 등록됩니다:
rs.addListener(bg);
이제 bg
는 커서 이동, 행 변경, 또는 rs
전체 데이터가 갱신될 때마다 알림을 받습니다.
스크롤 가능성 및 수정 가능성 추가
어떤 DBMS는 스크롤 가능한 ResultSet을 지원하지 않으며, 일부는 수정 가능한 ResultSet도 지원하지 않습니다. 만약 해당 DBMS의 JDBC 드라이버가 이러한 기능을 제공하지 않는다면 RowSet 객체를 사용해 이를 보완할 수 있습니다. RowSet 객체는 기본적으로 스크롤 가능하며 수정도 가능합니다. 따라서 결과 집합의 내용을 RowSet 객체에 복사하면 해당 결과 집합을 스크롤하고 수정할 수 있게 됩니다.
RowSet 객체의 종류
RowSet 객체는 연결(Connected)형과 비연결(Disconnected)형으로 나뉩니다.
- 연결형 RowSet은 JDBC 드라이버를 통해 관계형 데이터베이스에 연결하며, 객체 수명 동안 연결을 유지합니다.
- 비연결형 RowSet은 ResultSet으로부터 데이터를 읽거나 데이터를 다시 쓸 때만 데이터 소스에 연결하며, 이후 연결을 해제한 채 독립적으로 작동합니다.
연결형 RowSet 객체
표준 RowSet 구현 중에서 JdbcRowSet
만이 연결형 RowSet 객체입니다. 항상 데이터베이스에 연결된 JdbcRowSet
객체는 ResultSet
과 매우 유사하며, 주로 스크롤 불가능하고 읽기 전용인 ResultSet
을 스크롤 가능하고 수정 가능하게 만드는 래퍼(wrapper)로 사용됩니다.
또한, JavaBeans 컴포넌트로서 JdbcRowSet
객체는 예를 들어 GUI 도구에서 JDBC 드라이버 선택 등에도 사용될 수 있습니다.
비연결형 RowSet 객체
나머지 네 가지는 모두 비연결형 RowSet 구현입니다. 이들은 연결형 RowSet이 가진 기능은 물론, 연결이 끊긴 상태에서도 가능한 추가적인 기능도 갖고 있습니다.
예를 들어, 비연결형 RowSet 객체는 연결을 유지하지 않기 때문에 JdbcRowSet
이나 ResultSet
보다 훨씬 가볍습니다. 또한 이들은 직렬화 가능(Serializable)하므로 네트워크를 통해 데이터를 전송할 때 이상적이며, PDA나 휴대폰 같은 클라이언트 장치로도 보낼 수 있습니다.
CachedRowSet
JdbcRowSet
의 모든 기능 보유- 데이터 소스에 연결 및 쿼리 실행
- 결과로부터 데이터를 읽어들여 내부에 저장
- 연결을 끊은 상태에서도 데이터 조작 및 변경
- 데이터 소스에 다시 연결하여 변경 사항 반영
- 데이터 소스와 충돌 여부 확인 및 충돌 해결 가능
WebRowSet
CachedRowSet
의 모든 기능 보유- 자신을 XML 문서로 저장
- XML 문서로부터 WebRowSet 데이터 읽기 가능
JoinRowSet
WebRowSet
의 모든 기능 보유- 데이터 소스에 연결하지 않고 SQL JOIN과 동일한 효과 구현 가능
FilteredRowSet
WebRowSet
의 모든 기능 보유- 필터링 기준을 적용하여 일부 데이터만 보이도록 설정 가능
- 쿼리 언어를 사용하지 않고도 RowSet에 대해 질의한 것과 같은 효과
출처 : https://docs.oracle.com/javase/tutorial/jdbc/basics/rowset.html
Using RowSet Objects (The Java™ Tutorials > JDBC Database Access > JDBC Basics)
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Dev.java for updated tutorials taking advantag
docs.oracle.com
'High Level Programming Language > JDBC Database Access' 카테고리의 다른 글
Using JoinRowSet Objects (0) | 2025.04.13 |
---|---|
Using JdbcRowSet Objects (0) | 2025.04.06 |
Using Transactions (0) | 2025.04.06 |
Using Prepared Statements (0) | 2025.04.06 |
Retrieving and Modifying Values from Result Sets (0) | 2025.04.06 |