-
- All Superinterfaces:
-
AutoCloseable
,Joinable
,ResultSet
,RowSet
,Wrapper
- All Known Subinterfaces:
-
FilteredRowSet
,JoinRowSet
,WebRowSet
public interface CachedRowSet extends RowSet, Joinable
CachedRowSet
所有标准实现必须实现的接口。Oracle Corporation提供的
CachedRowSet
接口的参考实现是标准实现。 开发人员可以使用此实现,他们可以扩展它,或者他们可以选择编写自己的此接口实现。CachedRowSet
对象是用于将其行缓存在内存中的数据行的容器,这使得可以在不始终连接到其数据源的情况下进行操作。 此外,它是一个JavaBeans™组件,可滚动,可更新和可序列化。CachedRowSet
对象通常包含结果集中的行,但它也可以包含具有表格格式的任何文件中的行,例如电子表格。 参考实现仅支持从ResultSet
对象获取数据,但开发人员可以扩展SyncProvider
实现以提供对其他表格数据源的访问。应用程序可以修改
CachedRowSet
对象中的数据,然后可以将这些修改传播回数据源。CachedRowSet
对象是断开连接的行集,这意味着它只是短暂地使用与其数据源的连接。 它在读取数据时连接到其数据源,以便用行填充自身,并在将更改传播回其底层数据源时再次连接。 其余时间,CachedRowSet
对象断开连接,包括正在修改其数据。 断开连接会使RowSet
对象更加精简,因此更容易传递给另一个组件。 例如,断开连接的RowSet
对象可以被序列化并通过线路传递到瘦客户端,例如个人数字助理(PDA)。1.0创建
以下代码行使用参考实现(RI)中提供的CachedRowSet
对象CachedRowSet
的默认构造函数来创建默认的CachedRowSet
对象。CachedRowSetImpl crs = new CachedRowSetImpl();
这个新的CachedRowSet
对象将其属性设置为BaseRowSet
对象的默认属性,此外,它将具有RIOptimisticProvider
对象作为其同步提供程序。RIOptimisticProvider
是RI中包含的两个SyncProvider
实现之一,是SyncFactory
单例在未指定同步提供程序时将提供的默认提供程序。甲
SyncProvider
对象提供一个CachedRowSet
对象与读取器(一个RowSetReader
用于从数据源读取数据来填充数据本身对象)。 可以实现读取器以从ResultSet
对象或具有表格格式的文件读取数据。SyncProvider
对象还提供了一个写入程序(RowSetWriter
对象),用于同步对CachedRowSet
对象在与基础数据源中的数据断开连接时所做的数据的任何修改。可以实施作者在检查冲突和避免冲突时采取不同程度的谨慎。 (
RIOptimisticProvider
集使用该值填充自身后,数据源中的值发生更改时会发生冲突。)RIOptimisticProvider
实现假定冲突很少或没有冲突,因此不设置锁定。 仅当没有冲突时,它才会使用CachedRowSet
对象中的值更新数据源。 可以实现其他编写器,以便它们始终将修改后的数据写入数据源,这可以通过不检查冲突来实现,或者在频谱的另一端,通过设置足以防止数据源中的数据的锁来实现。改变。 还有其他作家的实现可以介于两者之间。CachedRowSet
对象可以使用已在SyncFactory
单例中注册的任何SyncProvider
实现。 应用程序可以通过调用以下代码行来找出已注册的SyncProvider
实现。java.util.Enumeration providers = SyncFactory.getRegisteredProviders();
CachedRowSet
对象有两种方法可以指定它将使用哪个SyncProvider
对象。- 将实现的名称提供给构造函数
以下代码行创建CachedRowSet
对象crs2 ,该对象使用默认值初始化,但其SyncProvider
对象是指定的对象。CachedRowSetImpl crs2 = new CachedRowSetImpl( "com.fred.providers.HighAvailabilityProvider");
- 设置
SyncProvider
使用CachedRowSet
方法setSyncProvider
下面的代码行重置SyncProvider
对象CRS,则CachedRowSet
与默认构造创建的对象。crs.setSyncProvider("com.fred.providers.HighAvailabilityProvider");
SyncFactory
和SyncProvider
的注释。2.0从
使用从CachedRowSet
对象检索数据ResultSet
接口继承的getter方法从CachedRowSet
对象检索数据。 以下示例(其中crs
是CachedRowSet
对象)演示了如何遍历行,检索每行中的列值。 第一个示例使用带有列号的getter方法的版本; 第二个示例使用采用列名称的版本。 当RowSet
对象的命令格式为SELECT * FROM TABLENAME
时,通常使用列号; 当命令按名称指定列时,最常使用列名。while (crs.next()) { String name = crs.getString(1); int id = crs.getInt(2); Clob comment = crs.getClob(3); short dept = crs.getShort(4); System.out.println(name + " " + id + " " + comment + " " + dept); }
while (crs.next()) { String name = crs.getString("NAME"); int id = crs.getInt("ID"); Clob comment = crs.getClob("COM"); short dept = crs.getShort("DEPT"); System.out.println(name + " " + id + " " + comment + " " + dept); }
2.1检索
应用程序可以获取有关在列信息RowSetMetaData
CachedRowSet
通过调用对象ResultSetMetaData
种RowSetMetaData
一对方法RowSetMetaData
对象。 以下代码片段(其中crs是CachedRowSet
对象)说明了该过程。 第一行创建一个RowSetMetaData
对象,其中包含有关crs中列的信息。 继承自ResultSet
接口的方法getMetaData
返回ResultSetMetaData
对象,该对象在被分配给变量rsmd之前被转换为RowSetMetaData
对象。 第二行找出jrs有多少列,第三行获取存储在jrs
第二列中的JDBC类型值。RowSetMetaData rsmd = (RowSetMetaData)crs.getMetaData(); int count = rsmd.getColumnCount(); int type = rsmd.getColumnType(2);
该RowSetMetaData
接口不同于ResultSetMetaData
两种方式接口。- 它包括
setter
方法:RowSet
对象在内部使用这些方法时,使用来自不同ResultSet
对象的数据。 - 它包含较少的
getter
方法:某些ResultSetMetaData
方法不适用于RowSet
对象。 例如,检索列值是可写还是只读的方法不适用,因为所有RowSet
对象的列都是可写的或只读的,具体取决于行集是否可更新。
RowSetMetaData
对象,实现必须重写getMetaData()
中定义的方法java.sql.ResultSet
并返回一个RowSetMetaData
对象。3.0更新
更新CachedRowSet
对象CachedRowSet
对象类似于更新ResultSet
对象,但由于行集在更新时未连接到其数据源,因此必须采取额外步骤来实现其基础数据源中的更改。 在调用方法updateRow
或insertRow
,CachedRowSet
对象还必须调用方法acceptChanges
以将更新写入数据源。 以下示例(其中光标位于CachedRowSet
对象crs中的行上)显示更新当前行中的两个列值并更新RowSet
对象的基础数据源所需的代码。crs.updateShort(3, 58); crs.updateInt(4, 150000); crs.updateRow(); crs.acceptChanges();
下一个示例演示如何移动到插入行,在插入行上构建新行,将其插入行集,然后调用方法
acceptChanges
以将新行添加到基础数据源。 请注意,与getter方法一样,updater方法可以使用列索引或列名来指定要执行的列。crs.moveToInsertRow(); crs.updateString("Name", "Shakespeare"); crs.updateInt("ID", 10098347); crs.updateShort("Age", 58); crs.updateInt("Sal", 150000); crs.insertRow(); crs.moveToCurrentRow(); crs.acceptChanges();
注意:
insertRow()
方法插入CachedRowSet
对象的内容时,插入行是实现定义的。CachedRowSet
接口的参考实现在当前行之后立即插入一个新行,但可以实现在任意数量的其他位置插入新行。关于这些示例的另一个注意事项是它们如何使用方法
acceptChanges
。 正是这种方法将CachedRowSet
对象中的更改传播回基础数据源,在内部调用RowSet
对象的编写器以将更改写入数据源。 为此,编写者必须承担与该数据源建立连接的费用。 前述两个代码片段调用方法acceptChanges
调用之后立即updateRow
或insertRow
。 但是,当有多行被更改时,在完成对updateRow
和insertRow
所有调用之后调用acceptChanges
会更有效。 如果acceptChanges
调用acceptChanges
一次,则只需要建立一个连接。4.0更新基础数据源
执行方法acceptChanges
,将在CachedRowSet
调用CachedRowSet
对象的writer(RowSetWriterImpl
对象),以将对行集所做的更改写入基础数据源。 实现编写器以建立与数据源的连接并向其写入更新。通过
SyncProvider
接口的实现提供SyncProvider
器,如第1节“创建CachedRowSet
对象”中所述。 默认的参考实现提供程序RIOptimisticProvider
将其RIOptimisticProvider
实现为使用乐观并发控制机制。 也就是说,当行集与数据库断开连接时,它在底层数据库中不保持锁定,只是在将数据写入数据源之前检查是否存在任何冲突。 如果存在任何冲突,则不会向数据源写入任何内容。SyncProvider
类提供的读写器工具是可插拔的,允许自定义数据检索和更新。 如果需要不同的并发控制机制,可以使用方法setSyncProvider
插入SyncProvider
的不同实现。为了使用乐观并发控制例程,
RIOptimisticProvider
保持其当前值和原始值(它紧接在当前值之前的值)。 请注意,如果未对RowSet
对象中的数据进行任何更改,则其当前值和原始值相同,两者都是最初填充RowSet
对象的值。 但是,一旦更改了RowSet
对象中的任何值,当前值和原始值将不同,但在此阶段,原始值仍然是初始值。 对于RowSet
对象中的数据的任何后续更改,其原始值和当前值仍将不同,但其原始值将是先前为当前值的值。跟踪原始值允许
RowSet
将RowSet
对象的原始值与数据库中的值进行比较。 如果数据库中的值与RowSet
对象的原始值不同,这意味着数据库中的值已更改,则存在冲突。 作者是否检查冲突,检查的程度以及处理冲突的方式都取决于它是如何实现的。5.0注册和通知监听器
作为JavaBeans组件,所有行集都参与JavaBeans事件模型,继承注册侦听器的方法,并通知它们BaseRowSet
类的更改。CachedRowSet
对象的侦听器是CachedRowSet
集发生更改时得到通知的组件。 例如,如果CachedRowSet
对象包含查询结果并且这些结果显示在表格和条形图中,则表格和条形图可以作为具有行集的侦听器注册,以便他们可以将自己更新为反映变化。 要成为侦听器,表和条形图类必须实现RowSetListener
接口。 然后可以将它们添加到CachedRowSet
对象的侦听器列表中,如以下代码行所示。crs.addRowSetListener(table); crs.addRowSetListener(barGraph);
每个CachedRowSet
方法移动光标或变更数据还通知注册的监听的变化,因此table
和barGraph
当在一个变化将被通知crs
。6.0将数据传递给瘦客户端
使用CachedRowSet
对象的主要原因之一是在应用程序的不同组件之间传递数据。 因为它是可序列化的,所以可以使用CachedRowSet
对象,例如,将通过网络在服务器环境中运行的企业JavaBeans组件执行的查询结果发送到在Web浏览器中运行的客户端。当
CachedRowSet
对象断开连接时,它可能比具有相同数据的ResultSet
对象更精简。 因此,它特别适合于将数据发送到瘦客户机,例如PDA,由于资源限制或安全考虑,使用JDBC驱动程序是不合适的。 因此,CachedRowSet
对象提供了“获取行”的方法,而无需实现完整的JDBC API。7.0滚动和更新
CachedRowSet
对象的第二个主要用途是为CachedRowSet
对象提供滚动和更新,ResultSet
对象本身不提供这些功能。 换句话说,当DBMS不提供对滚动和更新的完全支持时,可以使用CachedRowSet
对象来增强启用JDBC技术的驱动程序(以下称为“JDBC驱动程序”)的功能。 为了实现让非滚动的效果和只读ResultSet
对象滚动和可更新,程序员只需创建一个CachedRowSet
填充了对象ResultSet
对象的数据。 这在以下代码片段中进行了演示,其中stmt
是Statement
对象。ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES"); CachedRowSetImpl crs = new CachedRowSetImpl(); crs.populate(rs);
对象
crs
现在包含表EMPLOYEES
中的数据,就像对象rs
一样。 不同之处在于crs
的光标可以向前,向后移动或移动到特定行,即使rs
的光标只能向前移动也是如此。 此外,crs
是可更新的,即使rs
不是,因为默认情况下,CachedRowSet
对象是可滚动和可更新的。总之,
CachedRowSet
对象可以被视为一组在数据源外部缓存的断开连接的行。 它既瘦又可序列化,可以通过线路轻松发送,非常适合将数据发送到瘦客户端。 但是,CachedRowSet
对象确实有一个限制:它的大小受限于它一次可以存储在内存中的数据量。8.0获得通用数据访问
CachedRowSet
类的另一个优点是它可以从关系数据库以外的源检索和存储数据。 可以实现行集的阅读器,以使用来自任何表格数据源(包括电子表格或平面文件)的数据来读取和填充其行集。 因为可以从头创建CachedRowSet
对象及其元数据,所以充当行集工厂的组件可以使用此功能创建包含来自非SQL数据源的数据的行集。 尽管如此,预计大多数情况下,CachedRowSet
对象将包含使用JDBC API从SQL数据库中提取的数据。9.0设置属性
所有行集都维护一组属性,通常使用工具设置。 行集具有的属性的数量和种类将有所不同,具体取决于行集的作用以及它如何获取其数据。 例如,从ResultSet
对象获取其数据的行集需要设置进行数据库连接所需的属性。 如果行集使用DriverManager
工具建立连接,则需要为标识相应驱动程序的JDBC URL设置属性,并且需要设置提供用户名和密码的属性。 另一方面,如果行集使用DataSource
对象进行连接(这是首选方法),则不需要设置JDBC URL的属性。 相反,它需要为数据源的逻辑名称,用户名和密码设置属性。注意:要使用
DataSource
对象进行连接,必须使用使用Java命名和目录接口(JNDI)API的命名服务注册DataSource
对象。 此注册通常由以系统管理员身份行事的人员完成。为了能够使用数据库中的数据填充自身,行集需要设置命令属性。 此属性是一个
PreparedStatement
对象的查询,它允许查询具有在运行时设置的参数占位符,而不是设计时。 要使用值设置这些占位符参数,行集提供了用于设置每种数据类型的值的setter方法,类似于PreparedStatement
接口提供的setter方法。以下代码片段说明了
CachedRowSet
对象crs
如何设置其命令属性。 请注意,如果使用工具设置属性,则此工具将使用该代码。crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS " + "WHERE CREDIT_LIMIT > ? AND REGION = ?");
用于设置命令占位符参数的值包含在
RowSet
对象的params
字段中,该字段是Vector
对象。CachedRowSet
类提供了一组用于在其params
字段中设置元素的setter方法。 以下代码片段演示了如上一个示例中的查询中的两个参数设置。crs.setInt(1, 5000); crs.setString(2, "West");
params
字段现在包含两个元素,每个元素都是两个元素长的数组。 第一个元素是参数号; 第二个是要设置的值。 在这种情况下,第一元件params
是1
,5000
,并且所述第二元件是2
,"West"
。 当应用程序调用方法execute
,它将依次调用此RowSet
对象的读取器,该读取器将依次调用其readData
方法。 作为其实现的一部分,readData
将得到值params
,并用它们来设置命令的占位符参数。 在获得Connection
对象con
之后,以下代码片段给出了读者如何执行此Connection
con
。PreparedStatement pstmt = con.prepareStatement(crs.getCommand()); reader.decodeParams(); // decodeParams figures out which setter methods to use and does something // like the following: // for (i = 0; i < params.length; i++) { // pstmt.setObject(i + 1, params[i]); // }
此时,
crs
的命令是查询"SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS WHERE CREDIT_LIMIT > 5000 AND REGION = "West"
。 在readData
方法使用以下代码行执行此命令后,它将具有rs
中用于填充crs
。ResultSet rs = pstmt.executeQuery();
前面的代码片段可以了解幕后发生的事情; 它们不会出现在不会调用
readData
和decodeParams
等方法的应用程序中。 相反,以下代码片段显示了应用程序可能执行的操作。 它设置rowset的命令,设置命令的参数,并执行命令。 只需调用execute
方法,crs
就可以使用表CUSTOMERS
的请求数据填充自身。crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS" + "WHERE CREDIT_LIMIT > ? AND REGION = ?"); crs.setInt(1, 5000); crs.setString(2, "West"); crs.execute();
10.0分页数据
因为CachedRowSet
对象将数据存储在内存中,所以它在任何时候都可以包含的数据量由可用内存量决定。 为了解决这个限制,CachedRowSet
对象可以从称为页面的数据块中检索ResultSet
对象中的数据。 要利用此机制,应用程序使用方法setPageSize
设置要包含在页面中的行数。 换句话说,如果页面大小设置为5,则将一次从数据源中提取一行五行数据。 应用程序还可以选择设置一次可以获取的最大行数。 如果将最大行数设置为零,或者未设置最大行数,则一次可以获取的行数没有限制。设置属性后,必须使用方法
populate
或方法execute
使用数据填充CachedRowSet
对象。 以下代码行演示了使用方法populate
。 请注意,此版本的方法有两个参数,一个ResultSet
句柄和ResultSet
对象中的行,从该对象开始检索行。CachedRowSet crs = new CachedRowSetImpl(); crs.setMaxRows(20); crs.setPageSize(4); crs.populate(rsHandle, 10);
当这段代码运行时, crs将从第10行开始用rsHandle填充四行。下一个代码片段显示使用方法
execute
填充CachedRowSet
对象,该方法可能会也可能不会将Connection
对象作为参数。 此代码传递execute
Connection
对象conHandle 。请注意,以下代码片段与前一代码片段之间存在两个差异。 首先,不调用方法
setMaxRows
,因此对crs可能包含的行数没有限制。 (请记住, crs总是有超出限制,它可以在内存中存储多少数据。)第二个区别是你不能传递方法execute
ResultSet
对象中从中开始检索行的行数。 此方法始终从第一行开始。CachedRowSet crs = new CachedRowSetImpl(); crs.setPageSize(5); crs.execute(conHandle);
运行此代码后, crs将包含来自crs命令生成的ResultSet
对象的ResultSet
数据。 crs的 编写器将使用conHandle连接到数据源并执行crs命令。 然后,应用程序能够以与对任何其他CachedRowSet
对象中的数据进行操作相同的方式对crs中的数据进行操作。要访问下一页(数据块),应用程序调用方法
nextPage
。 此方法创建一个新的CachedRowSet
对象,并使用下一页数据填充它。 例如,假设CachedRowSet
对象的命令返回具有1000行数据的ResultSet
对象rs 。 如果页面大小已设置为100,则第一次调用方法nextPage
将创建一个包含前100行rs的CachedRowSet
对象。 在执行了前100行中的数据操作之后,应用程序可以再次调用方法nextPage
来创建另一个具有rs的第二行100的CachedRowSet
对象。 来自第一个CachedRowSet
对象的数据将不再存在于内存中,因为它将替换为第二个CachedRowSet
对象中的数据。 在第十次调用方法nextPage
,第十个CachedRowSet
对象将包含来自rs的最后100行数据,这些数据存储在存储器中。 在任何给定时间,仅来自一个CachedRowSet
对象的数据存储在内存中。该方法
nextPage
返回true
只要当前页不是各行的最后一页,并false
时,有没有更多的页面。 因此,它可以在while
循环中用于检索所有页面,如以下代码行所示。CachedRowSet crs = CachedRowSetImpl(); crs.setPageSize(100); crs.execute(conHandle); while(crs.nextPage()) { while(crs.next()) { . . . // operate on chunks (of 100 rows each) in crs, // row by row } }
运行此代码片段后,应用程序将遍历所有1000行,但一次在内存中的行数不会超过100行。CachedRowSet
接口还定义了方法previousPage
。 正如方法nextPage
类似于ResultSet
方法next
,方法previousPage
类似于ResultSet
方法previous
。 与方法nextPage
类似,previousPage
创建一个CachedRowSet
对象,其中包含设置为页面大小的行数。 所以,举例来说,该方法previousPage
可以在使用while
环在前面的代码片段末端通过从最后一页到第一页的页面导航回。 方法previousPage
也类似于nextPage
,因为它可以在while
循环中使用,除了它返回true
,只要它前面有另一个页面和false
当它前面没有更多页面时。通过将光标定位在每页的最后一行之后,如在以下代码片段中所做的那样,方法
previous
从previous
的最后一行导航到第一行。 代码也可以将光标留在每页的第一行之前,然后使用while
循环中的方法next
来导航从第一行到最后一行的每个页面。以下代码片段假定从前一个代码片段继续,这意味着第十个
CachedRowSet
对象的光标位于最后一行。 代码将光标移动到最后一行之后,以便第一次调用方法previous
将光标放回最后一行。 在浏览完最后一页中的所有行(CachedRowSet
对象crs )之后,代码然后进入while
循环以进入第九页,向后遍历行,转到第八页,向后遍历行,依此类推到第一页的第一行。crs.afterLast(); while(crs.previous()) { . . . // navigate through the rows, last to first { while(crs.previousPage()) { crs.afterLast(); while(crs.previous()) { . . . // go from the last row to the first row of each page } }
- 从以下版本开始:
- 1.5
-
-
字段汇总
字段 变量和类型 字段 描述 static boolean
COMMIT_ON_ACCEPT_CHANGES
已过时。由于此字段为final(它是接口的一部分),因此无法更改其值。-
Fields declared in interface java.sql.ResultSet
CLOSE_CURSORS_AT_COMMIT, CONCUR_READ_ONLY, CONCUR_UPDATABLE, FETCH_FORWARD, FETCH_REVERSE, FETCH_UNKNOWN, HOLD_CURSORS_OVER_COMMIT, TYPE_FORWARD_ONLY, TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENSITIVE
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 void
acceptChanges()
将行更新,插入和删除对此CachedRowSet
对象所做的更改传播到基础数据源。void
acceptChanges(Connection con)
使用指定的Connection
对象传播对支持此CachedRowSet
对象的数据源的所有行更新,插入和删除更改,以建立与数据源的连接。boolean
columnUpdated(int idx)
指示此CachedRowSet
对象的当前行中的指定列是否已更新。boolean
columnUpdated(String columnName)
指示此CachedRowSet
对象的当前行中的指定列是否已更新。void
commit()
每个CachedRowSet
对象的SyncProvider
含有Connection
从对象ResultSet
或JDBC特性传递给它的构造函数。CachedRowSet
createCopy()
创建一个RowSet
对象,该对象是此CachedRowSet
对象中数据的深层副本。CachedRowSet
createCopyNoConstraints()
创建一个CachedRowSet
对象,该对象是此CachedRowSet
对象数据的深层副本,但CachedRowSet
无关。CachedRowSet
createCopySchema()
创建一个CachedRowSet
对象,该对象是此CachedRowSet
对象的空副本。RowSet
createShared()
返回一个新RowSet
通过相同的数据与此的支持对象CachedRowSet
对象。void
execute(Connection conn)
用数据填充此CachedRowSet
对象,使用给定的连接生成将从中读取数据的结果集。int[]
getKeyColumns()
返回一个数组,其中包含一个或多个列号,这些列号表示形成一个键的列,该键唯一标识此CachedRowSet
对象中的行。ResultSet
getOriginal()
返回一个ResultSet
包含该原始值对象CachedRowSet
对象。ResultSet
getOriginalRow()
返回一个ResultSet
对象,该对象仅包含此CachedRowSet
对象的当前行的原始值。int
getPageSize()
返回CachedRowSet
对象的页面大小RowSetWarning
getRowSetWarnings()
检索此RowSet
对象上的调用报告的第一个警告。boolean
getShowDeleted()
检索boolean
指示标记为删除的行是否出现在当前行集中。SyncProvider
getSyncProvider()
检索此CachedRowSet
对象的SyncProvider
实现。String
getTableName()
返回用于创建此CachedRowSet
对象的对象(表)的标识符。boolean
nextPage()
增加CachedRowSet
的当前页面。void
populate(ResultSet data)
填充此CachedRowSet
从给定数据对象ResultSet
对象。void
populate(ResultSet rs, int startRow)
填充此CachedRowSet
从给定数据对象ResultSet
对象。boolean
previousPage()
减少CachedRowSet
的当前页面。void
release()
释放此CachedRowSet
对象的当前内容,并向所有已注册的侦听器发送rowSetChanged
事件。void
restoreOriginal()
将此CachedRowSet
对象还原为其原始值,即在最后一组更改之前的值。void
rollback()
每个CachedRowSet
对象的SyncProvider
包含来自原始ResultSet
的Connection
对象或传递给它的JDBC属性。void
rollback(Savepoint s)
每个CachedRowSet
对象的SyncProvider
含有Connection
从原始对象ResultSet
或JDBC属性传递给它。void
rowSetPopulated(RowSetEvent event, int numRows)
通知已注册的侦听器给定RowSetEvent对象中的RowSet对象已填充了许多其他行。void
setKeyColumns(int[] keys)
使用给定的列号数组设置此CachedRowSet
对象的keyCols
字段,该字段形成用于唯一标识此CachedRowSet
对象中的行的键。void
setMetaData(RowSetMetaData md)
使用给定的RowSetMetaData
对象设置此CachedRowSet
对象的元数据。void
setOriginalRow()
将此CachedRowSet
对象中的当前行设置为原始行。void
setPageSize(int size)
设置CachedRowSet
对象的页面大小。void
setShowDeleted(boolean b)
将属性showDeleted
设置为给定的boolean
值,该值确定标记为删除的行是否出现在当前行集中。void
setSyncProvider(String provider)
将此CachedRowSet
对象的SyncProvider
对象设置为指定的对象。void
setTableName(String tabName)
将从中导出此CachedRowSet
对象的表的标识符设置为给定的表名。int
size()
返回此CachedRowSet
对象中的行数。Collection<?>
toCollection()
这个转换CachedRowSet
对象到Collection
包含所有这些对象CachedRowSet
对象的数据。Collection<?>
toCollection(int column)
将此CachedRowSet
对象中的指定列转换为Collection
对象。Collection<?>
toCollection(String column)
将此CachedRowSet
对象中的指定列转换为Collection
对象。void
undoDelete()
取消删除当前行并通知侦听器行已更改。void
undoInsert()
如果已插入行,则立即从此CachedRowSet
对象中删除当前行,并通知侦听器行已更改。void
undoUpdate()
如果已修改行,则立即反转上次更新操作。-
声明方法的接口 javax.sql.rowset.Joinable
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn
-
声明方法的接口 java.sql.ResultSet
absolute, afterLast, beforeFirst, cancelRowUpdates, clearWarnings, close, deleteRow, findColumn, first, getArray, getArray, getAsciiStream, getAsciiStream, getBigDecimal, getBigDecimal, getBigDecimal, getBigDecimal, getBinaryStream, getBinaryStream, getBlob, getBlob, getBoolean, getBoolean, getByte, getByte, getBytes, getBytes, getCharacterStream, getCharacterStream, getClob, getClob, getConcurrency, getCursorName, getDate, getDate, getDate, getDate, getDouble, getDouble, getFetchDirection, getFetchSize, getFloat, getFloat, getHoldability, getInt, getInt, getLong, getLong, getMetaData, getNCharacterStream, getNCharacterStream, getNClob, getNClob, getNString, getNString, getObject, getObject, getObject, getObject, getObject, getObject, getRef, getRef, getRow, getRowId, getRowId, getShort, getShort, getSQLXML, getSQLXML, getStatement, getString, getString, getTime, getTime, getTime, getTime, getTimestamp, getTimestamp, getTimestamp, getTimestamp, getType, getUnicodeStream, getUnicodeStream, getURL, getURL, getWarnings, insertRow, isAfterLast, isBeforeFirst, isClosed, isFirst, isLast, last, moveToCurrentRow, moveToInsertRow, next, previous, refreshRow, relative, rowDeleted, rowInserted, rowUpdated, setFetchDirection, setFetchSize, updateArray, updateArray, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateBigDecimal, updateBigDecimal, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBoolean, updateBoolean, updateByte, updateByte, updateBytes, updateBytes, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateClob, updateClob, updateClob, updateClob, updateClob, updateClob, updateDate, updateDate, updateDouble, updateDouble, updateFloat, updateFloat, updateInt, updateInt, updateLong, updateLong, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNString, updateNString, updateNull, updateNull, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateRef, updateRef, updateRow, updateRowId, updateRowId, updateShort, updateShort, updateSQLXML, updateSQLXML, updateString, updateString, updateTime, updateTime, updateTimestamp, updateTimestamp, wasNull
-
声明方法的接口 javax.sql.RowSet
addRowSetListener, clearParameters, execute, getCommand, getDataSourceName, getEscapeProcessing, getMaxFieldSize, getMaxRows, getPassword, getQueryTimeout, getTransactionIsolation, getTypeMap, getUrl, getUsername, isReadOnly, removeRowSetListener, setArray, setAsciiStream, setAsciiStream, setAsciiStream, setAsciiStream, setBigDecimal, setBigDecimal, setBinaryStream, setBinaryStream, setBinaryStream, setBinaryStream, setBlob, setBlob, setBlob, setBlob, setBlob, setBlob, setBoolean, setBoolean, setByte, setByte, setBytes, setBytes, setCharacterStream, setCharacterStream, setCharacterStream, setCharacterStream, setClob, setClob, setClob, setClob, setClob, setClob, setCommand, setConcurrency, setDataSourceName, setDate, setDate, setDate, setDate, setDouble, setDouble, setEscapeProcessing, setFloat, setFloat, setInt, setInt, setLong, setLong, setMaxFieldSize, setMaxRows, setNCharacterStream, setNCharacterStream, setNCharacterStream, setNCharacterStream, setNClob, setNClob, setNClob, setNClob, setNClob, setNClob, setNString, setNString, setNull, setNull, setNull, setNull, setObject, setObject, setObject, setObject, setObject, setObject, setPassword, setQueryTimeout, setReadOnly, setRef, setRowId, setRowId, setShort, setShort, setSQLXML, setSQLXML, setString, setString, setTime, setTime, setTime, setTime, setTimestamp, setTimestamp, setTimestamp, setTimestamp, setTransactionIsolation, setType, setTypeMap, setUrl, setURL, setUsername
-
声明方法的接口 java.sql.Wrapper
isWrapperFor, unwrap
-
-
-
-
字段详细信息
-
COMMIT_ON_ACCEPT_CHANGES
@Deprecated static final boolean COMMIT_ON_ACCEPT_CHANGES
Deprecated.Because this field is final (it is part of an interface), its value cannot be changed.原因CachedRowSet
对象SyncProvider
提交更改时acceptChanges()
被调用。 如果设置为false,则在CachedRowSet
其中一个CachedRowSet
接口事务方法之前, 不会提交更改。- 另请参见:
-
commit()
,rollback()
, 常数字段值
-
-
方法详细信息
-
populate
void populate(ResultSet data) throws SQLException
填充此CachedRowSet
从给定数据对象ResultSet
对象。当应用程序与打开的
ResultSet
对象建立连接时,此方法可用作execute
方法的替代方法。 使用方法populate
比使用不带参数的execute
方法的版本更有效,因为它不会打开新连接并重新执行此CachedRowSet
对象的命令。 与使用带有ResultSet
对象的execute
版本相比,使用populate
方法更方便。- 参数
-
data
-所述ResultSet
包含数据对象读入此CachedRowSet
对象 - 异常
-
SQLException
- 如果提供了nullResultSet
对象或此CachedRowSet
对象无法检索关联的ResultSetMetaData
对象 - 另请参见:
-
execute(java.sql.Connection)
,ResultSet
,ResultSetMetaData
-
execute
void execute(Connection conn) throws SQLException
用数据填充此CachedRowSet
对象,使用给定的连接生成将从中读取数据的结果集。 此方法应关闭它创建的任何数据库连接,以确保此CachedRowSet
对象断开连接,除非它从数据源读取数据或将数据写入其数据源。此
CachedRowSet
对象的阅读器将使用conn建立与数据源的连接,以便它可以执行行集的命令并将生成的ResultSet
对象中的数据读入此CachedRowSet
对象。 此方法在填充此CachedRowSet
对象后也会关闭conn 。如果在已经填充实现时调用此方法,则(重新)设置内容和元数据。 此外,如果在调用方法
acceptChanges
以提交未完成更新之前调用此方法,那么这些更新将丢失。- 参数
-
conn
- 具有有效属性的标准JDBCConnection
对象 - 异常
-
SQLException
- 如果提供了无效的Connection
对象,或者在建立与数据源的连接时发生错误 - 另请参见:
-
populate(java.sql.ResultSet)
,Connection
-
acceptChanges
void acceptChanges() throws SyncProviderException
将行更新,插入和删除对此CachedRowSet
对象所做的更改传播到基础数据源。此方法调用此
CachedRowSet
对象的CachedRowSet
来完成幕后工作。 标准CachedRowSet
实现应使用SyncFactory
单例来获取提供RowSetWriter
对象(RowSetWriter
)的SyncProvider
实例。CachedRowSet
将尝试将此CachedRowSet
对象中所做的更改传播回数据源。当方法
acceptChanges
成功执行时,除了将更改写入数据源之外,还使当前行中的值为原始行中的值。根据所使用的
SyncProvider
实现的同步级别,SyncProvider
将比较原始值与数据源中的值以检查冲突。 例如,当存在冲突时,RIOptimisticProvider
实现会抛出SyncProviderException
并且不会向数据源写入任何内容。应用程序可以选择捕获
SyncProviderException
对象并检索它包含的SyncResolver
对象。SyncResolver
对象SyncResolver
列出冲突并在数据源上设置锁定,以避免在解决当前冲突时发生进一步冲突。 此外,对于每个冲突,它提供了检查冲突和设置应该保留在数据源中的值的方法。 解决所有冲突后,应用程序必须再次调用acceptChanges
方法将已解析的值写入数据源。 如果数据源中的所有值都已经是要acceptChanges
的值,则方法acceptChanges
不执行任何操作。某些提供程序实现可能使用锁来确保没有冲突。 在这种情况下,保证编写
acceptChanges
在调用方法acceptChanges
时将成功写入对数据源的更改。 这种方法可以立即方法后调用updateRow
,insertRow
,或deleteRow
一直呼吁,但它是更有效的已作出的所有修改完成后,只有一个连接需要建立只有一次调用它。注意:
acceptChanges()
方法将确定COMMIT_ON_ACCEPT_CHANGES
是否设置为true。 如果设置为true,则同步中的所有更新都将提交到数据源。 否则,应用程序必须根据需要显式调用commit()
或rollback()
方法。- 异常
-
SyncProviderException
- 如果基础同步提供程序的编写器无法将更新写回数据源 - 另请参见:
-
acceptChanges(java.sql.Connection)
,RowSetWriter
,SyncFactory
,SyncProvider
,SyncProviderException
,SyncResolver
-
acceptChanges
void acceptChanges(Connection con) throws SyncProviderException
使用指定的Connection
对象传播对支持此CachedRowSet
对象的数据源的所有行更新,插入和删除更改,以建立与数据源的连接。另一个版本的
acceptChanges
方法未通过连接,因为它使用Connection
对象中已定义的RowSet
对象,该对象是用于最初填充它的连接。方法
acceptChanges
这种形式类似于不带参数的形式; 但是,与其他形式不同,只有在基础数据源是JDBC数据源时才能使用此表单。 更新Connection
属性必须由使用SyncProvider
重置RowSetWriter
配置,以确保所述的内容CachedRowSet
对象被正确地同步。当方法
acceptChanges
成功执行时,除了将更改写入数据源之外,还使当前行中的值为原始行中的值。根据所使用的
SyncProvider
实现的同步级别,SyncProvider
将原始值与数据源中的值进行比较以检查冲突。 例如,当存在冲突时,RIOptimisticProvider
实现会抛出SyncProviderException
并且不会向数据源写入任何内容。应用程序可以选择捕获
SyncProviderException
对象并检索它包含的SyncResolver
对象。SyncResolver
对象SyncResolver
列出冲突并在数据源上设置锁定,以避免在解决当前冲突时发生进一步冲突。 此外,对于每个冲突,它提供了检查冲突和设置应该保留在数据源中的值的方法。 解决所有冲突后,应用程序必须再次调用acceptChanges
方法将已解析的值写入数据源。 如果数据源中的所有值都已经是要acceptChanges
的值,则方法acceptChanges
不执行任何操作。某些提供程序实现可能使用锁来确保没有冲突。 在这种情况下,保证当调用方法
acceptChanges
时,写入器将成功写入对数据源的更改。 这种方法可以立即方法后调用updateRow
,insertRow
,或deleteRow
一直呼吁,但它是更有效的已作出的所有修改完成后,只有一个连接需要建立只有一次调用它。注意:
acceptChanges()
方法将确定COMMIT_ON_ACCEPT_CHANGES
是否设置为true。 如果设置为true,则同步中的所有更新都将提交到数据源。 否则,应用程序必须根据需要显式调用commit
或rollback
方法。- 参数
-
con
- 标准JDBCConnection
对象 - 异常
-
SyncProviderException
- 如果基础同步提供程序的编写器无法将更新写回数据源 - 另请参见:
-
acceptChanges()
,RowSetWriter
,SyncFactory
,SyncProvider
,SyncProviderException
,SyncResolver
-
restoreOriginal
void restoreOriginal() throws SQLException
将此CachedRowSet
对象还原为其原始值,即在最后一组更改之前的值。 如果行集没有更改或只有一组更改,则原始值是用于填充此CachedRowSet
对象的值; 否则,原始值是它在当前值之前的值。调用此方法时,
CachedRowSet
实现必须确保对当前行集实例的所有更新,插入和删除都替换为先前的值。 此外,应将光标重置为第一行,并应触发rowSetChanged
事件以通知所有已注册的侦听器。- 异常
-
SQLException
- 如果发生错误,则将此CachedRowSet
对象的当前值CachedRowSet
到其先前值 - 另请参见:
-
RowSetListener.rowSetChanged(javax.sql.RowSetEvent)
-
release
void release() throws SQLException
释放此CachedRowSet
对象的当前内容,并向所有已注册的侦听器发送rowSetChanged
事件。 在调用此方法后,将丢弃任何未完成的更新,并且行集不包含任何行。 没有与基础数据源的交互,任何行集内容,元数据和内容更新都应该是不可恢复的。此
CachedRowSet
对象应该锁定,直到其内容和关联的更新完全清除,从而防止其他组件的“脏”读取持有对此RowSet
对象的引用。 此外,在读取此CachedRowSet
对象的所有组件都已完成读取之前,无法释放内容。 在触发rowSetChanged
事件后,此CachedRowSet
对象应返回到正常行为。保留元数据(包括JDBC属性和同步SPI属性)以供将来使用。 重要的是,诸如
command
属性之command
属性与最初建立此CachedRowSet
对象的原始数据源相关。此方法清空行集,而不是
close
方法,该方法将整个行集标记为可恢复,以允许垃圾收集器使用行集的Java VM资源。- 异常
-
SQLException
- 如果发生错误则刷新此CachedRowSet
对象的内容 - 另请参见:
-
RowSetListener.rowSetChanged(javax.sql.RowSetEvent)
,ResultSet.close()
-
undoDelete
void undoDelete() throws SQLException
取消删除当前行并通知侦听器行已更改。 调用此方法后,当前行不再标记为删除。 可以在行集的生命周期内的任何时间调用此方法。此外,可以通过使用任何光标位置控制方法调整光标位置来多次取消行删除,例如:
-
CachedRowSet.absolute
-
CachedRowSet.first
-
CachedRowSet.last
- 异常
-
SQLException
- if(1)当前行尚未删除或(2)光标位于插入行上,第一行之前或最后一行之后 - 另请参见:
-
undoInsert()
,ResultSet.cancelRowUpdates()
-
-
undoInsert
void undoInsert() throws SQLException
如果已插入行,则立即从此CachedRowSet
对象中删除当前行,并通知侦听器行已更改。 可以在行集的生命周期内的任何时间调用此方法,并假设当前行在异常限制内(见下文),它取消当前行的行插入。此外,可以通过使用任何光标位置控制方法调整光标的位置来进行多次行插入取消,例如:
-
CachedRowSet.absolute
-
CachedRowSet.first
-
CachedRowSet.last
- 异常
-
SQLException
- 如果(1)尚未插入当前行或(2)光标位于第一行之前,最后一行之后或插入行之前 - 另请参见:
-
undoDelete()
,ResultSet.cancelRowUpdates()
-
-
undoUpdate
void undoUpdate() throws SQLException
如果已修改行,则立即反转上次更新操作。 可以调用此方法来反转所有列的更新,直到一行中的所有更新都回滚到上一次同步(acceptChanges
)或填充之前的状态。 在对插入行执行更新时也可以调用此方法。可以
undoUpdate
集的生命周期内的任何时间调用undoUpdate
; 但是,在发生同步之后,此方法在对行集数据进行进一步修改之前不起作用。- 异常
-
SQLException
- 如果光标位于此CachedRowSet
对象的第一行之前或最后一行之后 - 另请参见:
-
undoDelete()
,undoInsert()
,ResultSet.cancelRowUpdates()
-
columnUpdated
boolean columnUpdated(int idx) throws SQLException
指示此CachedRowSet
对象的当前行中的指定列是否已更新。- 参数
-
idx
- 标识要检查更新的列的int
- 结果
-
true
若指定栏已明显更新; 否则为false
- 异常
-
SQLException
- 如果光标位于插入行上,第一行之前或最后一行之后 - 另请参见:
-
DatabaseMetaData.updatesAreDetected(int)
-
columnUpdated
boolean columnUpdated(String columnName) throws SQLException
指示是否已更新此CachedRowSet
对象的当前行中的指定列。- 参数
-
columnName
-String
对象,提供要检查更新的列的名称 - 结果
-
true
如果该栏目已明显更新; 否则为false
- 异常
-
SQLException
- 如果光标位于插入行上,第一行之前或最后一行之后 - 另请参见:
-
DatabaseMetaData.updatesAreDetected(int)
-
toCollection
Collection<?> toCollection() throws SQLException
这个转换CachedRowSet
对象到Collection
包含所有这些对象CachedRowSet
对象的数据。 由于Collection
框架的抽象特性,实现在如何表示这个Collection
对象方面具有一定的自由度。 每一行必须在任一通用充分表示Collection
实现或专用Collection
实现,如一个TreeMap
对象或Vector
对象。 必须在Java编程语言null
SQLNULL
列值表示为null
。CachedRowSet
接口的标准参考实现对行集使用TreeMap
对象,每行中的值包含在Vector
对象中。 预计大多数实现都会这样做。TreeMap
类型的集合保证地图将按升序键顺序排列,并根据键类的自然顺序排序。 每个键引用一个Vector
对象,该对象对应于RowSet
对象的一行。 因此,每个Vector
对象的大小必须与RowSet
对象中的列数完全相等。TreeMap
集合使用的密钥由实现决定,实现可以选择利用内部RowSet
表格结构中可用的集密钥,因为已在RowSet
对象本身或基础SQL数据上设置了密钥。- 结果
-
Collection
对象,其中包含此CachedRowSet
对象中每行的值 - 异常
-
SQLException
- 如果生成集合时发生错误 - 另请参见:
-
toCollection(int)
,toCollection(String)
-
toCollection
Collection<?> toCollection(int column) throws SQLException
将此CachedRowSet
对象中的指定列转换为Collection
对象。 由于Collection
框架的抽象性,实现在如何表示此Collection
对象方面具有一定的自由度。 每个列值应在通用Collection
实现或专用Collection
实现(例如Vector
对象)中完全表示。 必须在Java编程语言null
SQLNULL
列值表示为null
。标准参考实现使用
Vector
对象来包含列值,并且预计大多数实现都将执行相同的操作。 如果使用Vector
对象,则其大小必须与此CachedRowSet
对象中的行数完全相等。- 参数
-
column
-int
指示其值将在Collection
对象中表示的列 - 结果
-
Collection
对象,其中包含存储在此CachedRowSet
对象的指定列中的值 - 异常
-
SQLException
- 如果生成集合时发生错误或提供了无效的列ID - 另请参见:
-
toCollection()
,toCollection(String)
-
toCollection
Collection<?> toCollection(String column) throws SQLException
将此CachedRowSet
对象中的指定列转换为Collection
对象。 由于Collection
框架的抽象特性,实现在如何表示此Collection
对象方面具有一定的自由度。 每个列值应在通用Collection
实现或专用Collection
实现(例如Vector
对象)中完全表示。 必须在Java编程语言null
SQLNULL
列值表示为null
。标准参考实现使用
Vector
对象来包含列值,并且预计大多数实现都将执行相同的操作。 如果使用Vector
对象,则其大小必须与此CachedRowSet
对象中的行数完全相等。- 参数
-
column
- 一个String
对象,给出其值将在集合中表示的列的名称 - 结果
-
Collection
对象,包含存储在此CachedRowSet
对象的指定列中的值 - 异常
-
SQLException
- 如果生成集合时发生错误,或者提供了无效的列ID - 另请参见:
-
toCollection()
,toCollection(int)
-
getSyncProvider
SyncProvider getSyncProvider() throws SQLException
检索此CachedRowSet
对象的SyncProvider
实现。 在内部,行集使用此方法来触发行集和数据源之间的读取或写入操作。 例如,行集可能需要从SyncProvider
获取行集读取器(RowSetReader
对象)上的SyncProvider
以允许填充行集。RowSetReader rowsetReader = null; SyncProvider provider = SyncFactory.getInstance("javax.sql.rowset.provider.RIOptimisticProvider"); if (provider instanceof RIOptimisticProvider) { rowsetReader = provider.getRowSetReader(); }
假设rowsetReader是行集实现中的私有可访问字段,当应用程序调用execute
方法时,它依次调用reader的readData
方法来填充RowSet
对象。rowsetReader.readData((RowSetInternal)this);
此外,应用程序可以使用此方法返回的
SyncProvider
对象来调用返回有关SyncProvider
对象的信息的方法,包括有关供应商,版本,提供程序标识,同步等级以及当前设置的锁的信息。- 结果
-
在实例化行集时设置的
SyncProvider
对象,或者如果没有设置,则为默认提供程序 - 异常
-
SQLException
- 如果在返回SyncProvider
对象时发生错误 - 另请参见:
-
setSyncProvider(java.lang.String)
-
setSyncProvider
void setSyncProvider(String provider) throws SQLException
将此CachedRowSet
对象的SyncProvider
对象设置为指定的对象。 此方法允许重置SyncProvider
对象。应始终使用可用的
SyncProvider
机制实例化CachedRowSet
实现,但有时需要重置SyncProvider
对象。 例如,应用程序可能希望SyncProvider
使用默认的SyncProvider
对象,然后选择使用最近可用且最符合其需求的提供程序。重置
SyncProvider
对象会导致RowSet
对象从SyncFactory
请求新的SyncProvider
实现。 这具有重置所有先前连接和与原始数据源的关系的效果,并且可能极大地改变断开的行集的同步行为。- 参数
-
provider
- 提供SyncProvider
实现的完全限定类名的String
对象 - 异常
-
SQLException
- 如果尝试重置SyncProvider
实施时发生错误 - 另请参见:
-
getSyncProvider()
-
size
int size()
返回此CachedRowSet
对象中的行数。- 结果
- 行集中的行数
-
setMetaData
void setMetaData(RowSetMetaData md) throws SQLException
使用给定的RowSetMetaData
对象设置此CachedRowSet
对象的元数据。 当RowSetReader
对象正在读取行集的内容时,它会创建一个RowSetMetaData
对象并使用RowSetMetaData
实现中的方法对其进行初始化。 参考实现使用RowSetMetaDataImpl
类。 当阅读器完成读取行集内容时,将在内部调用此方法以将RowSetMetaData
对象传递给行集。- 参数
-
md
-一个RowSetMetaData
在此有关的列包含元数据的对象CachedRowSet
对象 - 异常
-
SQLException
- 如果向行集提供了无效的元数据
-
getOriginal
ResultSet getOriginal() throws SQLException
返回一个ResultSet
包含该原始值对象CachedRowSet
对象。ResultSet
对象的光标应位于第一行之前。 此外,返回的ResultSet
对象应具有以下属性:- ResultSet.TYPE_SCROLL_INSENSITIVE
- ResultSet.CONCUR_UPDATABLE
RowSet
对象的原始值是它在上次与基础数据源同步之前的值。 如果没有同步,则原始值将是用于填充RowSet
对象的值。 当应用程序调用方法acceptChanges
并且已实现SyncProvider
对象以检查冲突时,将在内部调用此方法。 如果是这种情况,则编写器将原始值与数据源中当前的值进行比较以检查冲突。- 结果
-
一个
ResultSet
对象包含此原始值CachedRowSet
对象 - 异常
-
SQLException
- 如果生成ResultSet
对象时发生错误
-
getOriginalRow
ResultSet getOriginalRow() throws SQLException
返回一个ResultSet
对象,该对象包含仅此CachedRowSet
对象的当前行的原始值。ResultSet
对象的光标应位于第一行之前。 此外,返回的ResultSet
对象应具有以下属性:- ResultSet.TYPE_SCROLL_INSENSITIVE
- ResultSet.CONCUR_UPDATABLE
- 结果
- 行的原始结果集
- 异常
-
SQLException
- 如果没有当前行 - 另请参见:
-
setOriginalRow()
-
setOriginalRow
void setOriginalRow() throws SQLException
将此CachedRowSet
对象中的当前行设置为原始行。在当前行中的任何修改值与数据源同步后,将在内部调用此方法。 必须将当前行标记为不再插入,删除或更新。
致电
setOriginalRow
是不可逆转的。- 异常
-
SQLException
- 如果没有当前行或遇到错误则重置原始行的内容 - 另请参见:
-
getOriginalRow()
-
getTableName
String getTableName() throws SQLException
返回用于创建此CachedRowSet
对象的对象(表)的标识符。 此名称可以多次设置,并且规范对可能发生的次数或标准实现是否应跟踪先前的表名称没有限制。- 结果
-
String
对象,给出该表的名称,该表是该CachedRowSet
对象的数据源,如果没有为表设置名称,null
- 异常
-
SQLException
- 如果在返回表名时遇到错误 - 另请参见:
-
ResultSetMetaData.getTableName(int)
-
setTableName
void setTableName(String tabName) throws SQLException
将从中导出此CachedRowSet
对象的表的标识符设置为给定的表名。CachedRowSet
使用此名称来确定在同步尝试期间将数据源中的值与CachedRowSet
对象的值进行比较时要使用的表。 表标识符还指示应写入此CachedRowSet
对象的修改值的位置。此
CachedRowSet
对象的实现可以从RowSetMetaDataImpl
对象内部获取名称。- 参数
-
tabName
- 一个String
对象,用于标识从中派生此CachedRowSet
对象的表; 不能是null
但可能是一个空字符串 - 异常
-
SQLException
- 如果在命名表或 tabName时遇到错误,则为null
- 另请参见:
-
RowSetMetaData.setTableName(int, java.lang.String)
,RowSetWriter
,SyncProvider
-
getKeyColumns
int[] getKeyColumns() throws SQLException
返回一个数组,其中包含一个或多个列号,这些列号表示形成一个键的列,该键唯一标识此CachedRowSet
对象中的行。- 结果
-
包含列号或数字的数组,指示哪些列构成此
CachedRowSet
对象中行的主键。 如果没有列代表主键,则此数组应为空。 - 异常
-
SQLException
- 如果此CachedRowSet
对象为空 - 另请参见:
-
setKeyColumns(int[])
,Joinable.getMatchColumnIndexes()
,Joinable.getMatchColumnNames()
-
setKeyColumns
void setKeyColumns(int[] keys) throws SQLException
使用给定的列号数组设置此CachedRowSet
对象的keyCols
字段,该字段形成用于唯一标识此CachedRowSet
对象中的行的键。如果一个
CachedRowSet
对象成为一个的一部分JoinRowSet
对象,并将所得约束用这种方法定义的键被保持如果列指定为键列也成为匹配列。- 参数
-
keys
- 数组int
指示形成此CachedRowSet
对象的主键的列; 数组中的每个元素必须大于0
且小于或等于此行集中的列数 - 异常
-
SQLException
- 如果给定数组中的任何数字对此行集无效 - 另请参见:
-
getKeyColumns()
,Joinable.setMatchColumn(String)
,Joinable.setMatchColumn(int)
-
createShared
RowSet createShared() throws SQLException
返回一个新RowSet
通过相同的数据与此的支持对象CachedRowSet
对象。 实际上,两个CachedRowSet
对象都有一个光标在同一数据上。 因此,副本所做的任何更改都可以对原始文件和任何其他重复项进行查看,就像原始文件所做的更改对所有重复文件都可见一样。 如果重复调用更改基础数据的方法,则它调用的方法会像原始CachedRowSet
对象调用时一样通知所有已注册的侦听器。此外,此方法创建的任何
RowSet
对象都具有与此CachedRowSet
对象相同的属性。 例如,如果此CachedRowSet
对象是只读的,则其所有重复项也将是只读的。 如果将其更改为可更新,则重复项也可以更新。注意:如果多个线程访问
RowSet
从创建的对象createShared()
方法,以下行为被指定为保护共享数据的完整性:读取和写入所有共享的RowSet
目的应被每个对象和单个底层表结构之间连续制造。- 结果
-
一个新的共享
RowSet
对象,它具有与此CachedRowSet
对象相同的属性,并且具有相同数据上的光标 - 异常
-
SQLException
- 如果发生错误或底层平台不支持克隆 - 另请参见:
-
RowSetEvent
,RowSetListener
-
createCopy
CachedRowSet createCopy() throws SQLException
创建一个RowSet
对象,该对象是此CachedRowSet
对象中数据的深层副本。 与此相反的RowSet
从生成的对象createShared
号召,在原有的副本所做的更新RowSet
对象必须是不可见的原RowSet
对象。 此外,使用原始RowSet
注册的任何事件侦听器的范围都不得超过新的RowSet
副本。 此外,必须保持建立的任何约束限制。- 结果
-
一个新的
RowSet
对象,它是此CachedRowSet
对象的深层副本,完全独立于此CachedRowSet
对象 - 异常
-
SQLException
- 如果在生成此CachedRowSet
对象的副本时发生错误 - 另请参见:
-
createShared()
,createCopySchema()
,createCopyNoConstraints()
,RowSetEvent
,RowSetListener
-
createCopySchema
CachedRowSet createCopySchema() throws SQLException
创建一个CachedRowSet
对象,该对象是此CachedRowSet
对象的空副本。 副本不得包含任何内容,只能表示原始CachedRowSet
对象的表结构。 此外,必须在新的空CachedRowSet
对象中同等地强制在原始CachedRowSet
对象中设置的主键或外键约束。 与此相反的RowSet
从生成的对象createShared
方法调用,更新此副本所做CachedRowSet
与对象createCopySchema
方法不能是可见。应用程序可以从此方法返回的
CachedRowSet
对象形成WebRowSet
对象,以便将RowSet
架构定义导出到XML以供将来使用。- 结果
-
此
CachedRowSet
对象的空副本 - 异常
-
SQLException
- 如果克隆此CachedRowSet
对象的结构时发生错误 - 另请参见:
-
createShared()
,createCopySchema()
,createCopyNoConstraints()
,RowSetEvent
,RowSetListener
-
createCopyNoConstraints
CachedRowSet createCopyNoConstraints() throws SQLException
创建一个CachedRowSet
对象,该对象是此CachedRowSet
对象数据的深层副本,但CachedRowSet
无关。 与从createShared
方法调用生成的RowSet
对象相比,对此CachedRowSet
对象的副本所做的更新必须不可见。 此外,使用此CachedRowSet
对象注册的任何事件侦听器都不得具有超过新RowSet
对象的范围。 此外,对于该建立的任何约束限制CachedRowSet
对象不得在副本中维持。- 结果
-
一个新的
CachedRowSet
对象,它是此CachedRowSet
对象的深层副本,完全独立于此CachedRowSet
对象 - 异常
-
SQLException
- 如果在生成此CachedRowSet
对象的副本时发生错误 - 另请参见:
-
createCopy()
,createShared()
,createCopySchema()
,RowSetEvent
,RowSetListener
-
getRowSetWarnings
RowSetWarning getRowSetWarnings() throws SQLException
检索此RowSet
对象上的调用报告的第一个警告。 此RowSet
对象上的后续警告将链接到此方法返回的RowSetWarning
对象。 每次读取新行时都会自动清除警告链。 可能不会在已关闭的RowSet对象上调用此方法; 这样做会导致SQLException
被抛出。- 结果
-
RowSetWarning报告的第一个
RowSetWarning
对象,如果没有,则返回null - 异常
-
SQLException
- 如果在关闭的RowSet上调用此方法 - 另请参见:
-
RowSetWarning
-
getShowDeleted
boolean getShowDeleted() throws SQLException
检索boolean
指示标记为删除的行是否出现在当前行集中。 如果返回true
,则删除的行与当前行可见。 如果返回false
,则使用当前行集不显示行。 默认值为false
。标准行集实现可能会出于安全考虑而选择限制此行为,或者更好地适应某些部署方案。 这保留为实现定义,并不代表标准行为。
注意:允许删除的行保持可见会使某些标准JDBC
RowSet
实现方法的行为复杂化。 但是,大多数行集用户可以简单地忽略这些额外的细节,因为只有非常专业的应用程序才可能希望利用此功能。- 结果
-
true
如果删除的行可见; 否则为false
- 异常
-
SQLException
- 如果行集实现无法确定标记为删除的行是否可见 - 另请参见:
-
setShowDeleted(boolean)
-
setShowDeleted
void setShowDeleted(boolean b) throws SQLException
将属性showDeleted
设置为给定的boolean
值,该值确定标记为删除的行是否出现在当前行集中。 如果该值设置为true
,则使用当前行集立即显示已删除的行。 如果该值设置为false
,则删除的行将设置为当前行集不可见。标准行集实现可能会出于安全考虑而选择限制此行为,或者更好地适应某些部署方案。 这保留为实现定义,并不代表标准行为。
- 参数
-
b
-true
是否应显示已删除的行; 否则为false
- 异常
-
SQLException
- 如果行集实现无法重置是否应该显示已删除的行 - 另请参见:
-
getShowDeleted()
-
commit
void commit() throws SQLException
每个CachedRowSet
对象的SyncProvider
含有Connection
从对象ResultSet
或JDBC特性传递给它的构造函数。 此方法包装Connection
提交方法以允许灵活的自动提交或非自动提交事务控制支持。自上次提交/回滚永久性以来,由
acceptChanges()
方法执行的所有更改。 仅在禁用自动提交模式时才应使用此方法。- 异常
-
SQLException
- 如果发生数据库访问错误或此CachedRowSet
此Connection对象处于自动提交模式 - 另请参见:
-
Connection.setAutoCommit(boolean)
-
rollback
void rollback() throws SQLException
每个CachedRowSet
对象的SyncProvider
含有Connection
从原始对象ResultSet
或JDBC属性传递给它。撤消当前事务中所做的所有更改。 仅在禁用自动提交模式时才应使用此方法。
- 异常
-
SQLException
- 如果发生数据库访问错误或此CachedRowSet
此Connection对象处于自动提交模式。
-
rollback
void rollback(Savepoint s) throws SQLException
每个CachedRowSet
对象的SyncProvider
包含来自原始ResultSet
的Connection
对象或传递给它的JDBC属性。将当前事务中所做的所有更改撤消回最后一个
Savepoint
事务标记。 仅在禁用自动提交模式时才应使用此方法。- 参数
-
s
- 交易标记Savepoint
- 异常
-
SQLException
- 如果发生数据库访问错误或此CachedRowSet
此Connection对象处于自动提交模式。
-
rowSetPopulated
void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException
通知已注册的侦听器给定RowSetEvent对象中的RowSet对象已填充了许多其他行。numRows
参数确保仅每numRow
触发此事件。可以使用event.getSource方法检索事件源。
- 参数
-
event
- 包含RowSet
对象的RowSetEvent
对象,该对象是事件的来源 -
numRows
- 填充时,应填充CachedRowSet
的行间隔数; 默认值为零; 不能低于fetchSize
或为零 - 异常
-
SQLException
-numRows < 0 or numRows < getFetchSize()
-
populate
void populate(ResultSet rs, int startRow) throws SQLException
填充此CachedRowSet
从给定数据对象ResultSet
对象。 虽然与populate(ResultSet)
方法有关,但还提供了一个附加参数,以允许从ResultSet
起始位置填充CachedRowSet实例。当应用程序与打开的
ResultSet
对象建立连接时,此方法可用作execute
方法的替代方法。 使用方法populate
比使用不带参数的execute
方法的版本更有效,因为它不会打开新连接并重新执行此CachedRowSet
对象的命令。 与使用ResultSet
对象的execute
版本相比,使用populate
方法更方便。- 参数
-
startRow
-在位置ResultSet
从哪里开始在此填充记录CachedRowSet
-
rs
-所述ResultSet
包含数据对象读入此CachedRowSet
对象 - 异常
-
SQLException
- 如果提供了nullResultSet
对象或此CachedRowSet
对象无法检索关联的ResultSetMetaData
对象 - 另请参见:
-
execute(java.sql.Connection)
,populate(ResultSet)
,ResultSet
,ResultSetMetaData
-
setPageSize
void setPageSize(int size) throws SQLException
设置CachedRowSet
对象的页面大小。CachedRowSet
可以被配置为在页面大小的行批量中填充自身。 当调用populate()
或execute()
,CachedRowSet
根据用于填充RowSet的原始SQL查询来获取其他页面。- 参数
-
size
-在页面大小CachedRowSet
- 异常
-
SQLException
- 如果设置CachedRowSet
页面大小或页面大小小于0时发生错误。
-
getPageSize
int getPageSize()
返回CachedRowSet
对象的页面大小- 结果
-
int
页面大小
-
nextPage
boolean nextPage() throws SQLException
增加CachedRowSet
的当前页面。 如果剩余行保留在用于填充RowSet的原始SQL查询的范围内,则会导致CachedRowSet
实现获取下一个页面大小的行并填充RowSet。- 结果
- 如果存在更多页面,则为true 如果这是最后一页,则为false
- 异常
-
SQLException
- 如果在获取下一页时发生错误,或者在填充或执行之前过早调用此方法。
-
previousPage
boolean previousPage() throws SQLException
减少CachedRowSet
的当前页面。 这会导致CachedRowSet
实现获取以前的页面大小行并填充RowSet。 上一页中返回的行数必须始终保留在用于填充RowSet的原始SQL查询的范围内。- 结果
- 如果成功检索到上一页,则为true; 如果这是第一页,则为false。
- 异常
-
SQLException
- 如果在获取上一页时发生错误,或者在填充或执行之前过早调用此方法。
-
-