使用行集对象
JDBC RowSet
对象以一种比结果集更灵活,更易于使用的方式保存表格数据。
Oracle 为RowSet
的一些较流行的用法定义了五个RowSet
interface,并且针对这些RowSet
interface提供了标准参考。在本教程中,您将学习如何使用这些参考实现。
RowSet
interface的这些版本及其实现已为程序员提供了便利。程序员可以自由编写自己的javax.sql.RowSet
interface版本,扩展五个RowSet
interface的实现或编写自己的实现。但是,许多程序员可能会发现标准参考实现已经满足了他们的需求,并将照常使用它们。
本节向您介绍RowSet
interface以及扩展该interface的以下interface:
-
JdbcRowSet
-
CachedRowSet
-
WebRowSet
-
JoinRowSet
-
FilteredRowSet
涵盖以下主题:
RowSet 对象可以做什么?
所有RowSet
对象都源自ResultSet
interface,因此可以共享其功能。使 JDBC RowSet
对象与众不同的原因是它们添加了以下新功能:
用作 JavaBeans 组件
所有RowSet
对象都是 JavaBeans 组件。这意味着他们具有以下优势:
-
Properties
-
JavaBeans 通知机制
Properties
所有RowSet
对象都有属性。属性是具有相应的 getter 和 setter 方法的字段。这些属性公开给构建器工具(例如,IDE JDveloper 和 Eclipse 附带的那些工具),使您可以直观地操作 bean。有关更多信息,请参阅JavaBeans跟踪中的Properties类。
JavaBeans 通知机制
RowSet
对象使用 JavaBeans 事件模型,在该模型中,发生某些事件时会通知已注册的组件。对于所有RowSet
对象,三个事件触发通知:
-
光标移动
-
更新,插入或删除行
-
更改整个
RowSet
内容
事件的通知将发给所有侦听器,这些侦听器已经实现了RowSetListener
interface,并且自己添加到了RowSet
对象的组件列表中,以便在发生三个事件中的任何一个时进行通知。
侦听器可以是 GUI 组件,例如条形图。如果条形图正在RowSet
对象中跟踪数据,则每当数据更改时,侦听器都希望知道新的数据值。因此,侦听器将实现RowSetListener
方法来定义发生特定事件时的处理方式。然后,还必须将侦听器添加到RowSet
对象的侦听器列表中。以下代码行将条形图组件bg
与RowSet
对象rs
注册。
rs.addListener(bg);
现在,每次光标移动,更改一行或所有rs
获取新数据时,都将通知bg
。
添加滚动性或更新性
一些 DBMS 不支持可以滚动(可滚动)的结果集,而某些 DBMS 不支持可以更新(可更新)的结果集。如果该 DBMS 的驱动程序没有添加滚动或更新结果集的功能,则可以使用RowSet
对象来实现。默认情况下,RowSet
对象是可滚动和可更新的,因此,通过使用结果集的内容填充RowSet
对象,可以有效地使结果集可滚动和可更新。
种 RowSet 对象
RowSet
对象被视为已连接或已断开连接。连接的RowSet
对象使用 JDBC 驱动程序构建与关系数据库的连接,并在其整个生命周期内维护该连接。断开连接的RowSet
对象构建与数据源的连接,只是从ResultSet
对象中读取数据或将数据写回到数据源。在从其数据源读取数据或将数据写入其数据源后,RowSet
对象从其断开连接,从而变为“断开连接”。断开连接的RowSet
对象在其使用寿命的大部分时间内都没有与其数据源的连接,并且独立运行。接下来的两节就RowSet
对象可以做什么告诉您连接或断开连接的含义。
连接的 RowSet 对象
标准RowSet
实现中只有一个是已连接的RowSet
对象:JdbcRowSet
。 JdbcRowSet
对象始终连接到数据库,它与ResultSet
对象最相似,并且通常用作包装器,以使原本不可滚动且只读的ResultSet
对象可滚动和可更新。
作为 JavaBeans 组件,例如,可以在 GUI 工具中使用JdbcRowSet
对象来选择 JDBC 驱动程序。可以使用JdbcRowSet
对象,因为它实际上是获得与数据库的连接的驱动程序的包装。
断开的行集对象
其他四个实现是断开连接的RowSet
个实现。断开连接的RowSet
对象具有连接的RowSet
对象的所有功能,此外,它们还具有仅对断开连接的RowSet
对象可用的附加功能。例如,不必维护与数据源的连接,使断开连接的RowSet
对象比JdbcRowSet
对象或ResultSet
对象轻得多。断开连接的RowSet
对象也可序列化,并且可序列化和轻量级的结合使它们非常适合通过网络发送数据。它们甚至可以用于向 PDA 和移动电话等瘦 Client 端发送数据。
CachedRowSet
interface定义了所有断开连接的RowSet
对象可用的基本功能。其他三个是CachedRowSet
interface的扩展,它们提供了更多的专用功能。以下信息显示了它们之间的关系:
CachedRowSet
对象具有JdbcRowSet
对象的所有功能,此外它还可以执行以下操作:
-
获取与数据源的连接并执行查询
-
从结果
ResultSet
对象中读取数据,并使用该数据填充自身 -
断开连接时处理数据并进行更改
-
重新连接到数据源以将更 Rewrite 回到它
-
检查与数据源的冲突并解决这些冲突
WebRowSet
对象具有CachedRowSet
对象的所有功能,此外它还可以执行以下操作:
-
将自己编写为 XML 文档
-
阅读描述
WebRowSet
对象的 XML 文档
JoinRowSet
对象具有WebRowSet
对象的所有功能(因此也具有CachedRowSet
对象的功能),并且它还可以执行以下操作:
- 形式等效于
SQL JOIN
,而不必连接到数据源
FilteredRowSet
对象同样具有WebRowSet
对象(因此也具有CachedRowSet
对象)的所有功能,此外它还可以执行以下操作:
- 应用过滤条件,以便仅可见选定的数据。这等效于对
RowSet
对象执行查询,而不必使用查询语言或连接到数据源。