使用行集对象

JDBC RowSet对象以一种比结果集更灵活,更易于使用的方式保存表格数据。

Oracle 为RowSet的一些较流行的用法定义了五个RowSetinterface,并且针对这些RowSetinterface提供了标准参考。在本教程中,您将学习如何使用这些参考实现。

RowSetinterface的这些版本及其实现已为程序员提供了便利。程序员可以自由编写自己的javax.sql.RowSetinterface版本,扩展五个RowSetinterface的实现或编写自己的实现。但是,许多程序员可能会发现标准参考实现已经满足了他们的需求,并将照常使用它们。

本节向您介绍RowSetinterface以及扩展该interface的以下interface:

  • JdbcRowSet

  • CachedRowSet

  • WebRowSet

  • JoinRowSet

  • FilteredRowSet

涵盖以下主题:

RowSet 对象可以做什么?

所有RowSet对象都源自ResultSetinterface,因此可以共享其功能。使 JDBC RowSet对象与众不同的原因是它们添加了以下新功能:

用作 JavaBeans 组件

所有RowSet对象都是 JavaBeans 组件。这意味着他们具有以下优势:

  • Properties

  • JavaBeans 通知机制

Properties

所有RowSet对象都有属性。属性是具有相应的 getter 和 setter 方法的字段。这些属性公开给构建器工具(例如,IDE JDveloper 和 Eclipse 附带的那些工具),使您可以直观地操作 bean。有关更多信息,请参阅JavaBeans跟踪中的Properties类。

JavaBeans 通知机制

RowSet对象使用 JavaBeans 事件模型,在该模型中,发生某些事件时会通知已注册的组件。对于所有RowSet对象,三个事件触发通知:

  • 光标移动

  • 更新,插入或删除行

  • 更改整个RowSet内容

事件的通知将发给所有侦听器,这些侦听器已经实现了RowSetListenerinterface,并且自己添加到了RowSet对象的组件列表中,以便在发生三个事件中的任何一个时进行通知。

侦听器可以是 GUI 组件,例如条形图。如果条形图正在RowSet对象中跟踪数据,则每当数据更改时,侦听器都希望知道新的数据值。因此,侦听器将实现RowSetListener方法来定义发生特定事件时的处理方式。然后,还必须将侦听器添加到RowSet对象的侦听器列表中。以下代码行将条形图组件bgRowSet对象rs注册。

rs.addListener(bg);

现在,每次光标移动,更改一行或所有rs获取新数据时,都将通知bg

添加滚动性或更新性

一些 DBMS 不支持可以滚动(可滚动)的结果集,而某些 DBMS 不支持可以更新(可更新)的结果集。如果该 DBMS 的驱动程序没有添加滚动或更新结果集的功能,则可以使用RowSet对象来实现。默认情况下,RowSet对象是可滚动和可更新的,因此,通过使用结果集的内容填充RowSet对象,可以有效地使结果集可滚动和可更新。

种 RowSet 对象

RowSet对象被视为已连接或已断开连接。连接的RowSet对象使用 JDBC 驱动程序构建与关系数据库的连接,并在其整个生命周期内维护该连接。断开连接的RowSet对象构建与数据源的连接,只是从ResultSet对象中读取数据或将数据写回到数据源。在从其数据源读取数据或将数据写入其数据源后,RowSet对象从其断开连接,从而变为“断开连接”。断开连接的RowSet对象在其使用寿命的大部分时间内都没有与其数据源的连接,并且独立运行。接下来的两节就RowSet对象可以做什么告诉您连接或断开连接的含义。

连接的 RowSet 对象

标准RowSet实现中只有一个是已连接的RowSet对象:JdbcRowSetJdbcRowSet对象始终连接到数据库,它与ResultSet对象最相似,并且通常用作包装器,以使原本不可滚动且只读的ResultSet对象可滚动和可更新。

作为 JavaBeans 组件,例如,可以在 GUI 工具中使用JdbcRowSet对象来选择 JDBC 驱动程序。可以使用JdbcRowSet对象,因为它实际上是获得与数据库的连接的驱动程序的包装。

断开的行集对象

其他四个实现是断开连接的RowSet个实现。断开连接的RowSet对象具有连接的RowSet对象的所有功能,此外,它们还具有仅对断开连接的RowSet对象可用的附加功能。例如,不必维护与数据源的连接,使断开连接的RowSet对象比JdbcRowSet对象或ResultSet对象轻得多。断开连接的RowSet对象也可序列化,并且可序列化和轻量级的结合使它们非常适合通过网络发送数据。它们甚至可以用于向 PDA 和移动电话等瘦 Client 端发送数据。

CachedRowSetinterface定义了所有断开连接的RowSet对象可用的基本功能。其他三个是CachedRowSetinterface的扩展,它们提供了更多的专用功能。以下信息显示了它们之间的关系:

CachedRowSet对象具有JdbcRowSet对象的所有功能,此外它还可以执行以下操作:

  • 获取与数据源的连接并执行查询

  • 从结果ResultSet对象中读取数据,并使用该数据填充自身

  • 断开连接时处理数据并进行更改

  • 重新连接到数据源以将更 Rewrite 回到它

  • 检查与数据源的冲突并解决这些冲突

WebRowSet对象具有CachedRowSet对象的所有功能,此外它还可以执行以下操作:

  • 将自己编写为 XML 文档

  • 阅读描述WebRowSet对象的 XML 文档

JoinRowSet对象具有WebRowSet对象的所有功能(因此也具有CachedRowSet对象的功能),并且它还可以执行以下操作:

  • 形式等效于SQL JOIN,而不必连接到数据源

FilteredRowSet对象同样具有WebRowSet对象(因此也具有CachedRowSet对象)的所有功能,此外它还可以执行以下操作:

  • 应用过滤条件,以便仅可见选定的数据。这等效于对RowSet对象执行查询,而不必使用查询语言或连接到数据源。