-
- 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
实现假定将存在很少或没有冲突,因此不设置锁定。 它只有在没有冲突时才更新来自CachedRowSet
对象的值的数据源。 可以实现其他写入器,使得它们总是将修改的数据写入数据源,这可以通过不检查冲突来实现,或者通过设置足以阻止数据源中的数据的锁定,在频谱的另一端改变。 还有其他作家的实现可以在两者之间。A
CachedRowSet
对象可以使用已经在SyncFactory
单例中注册的任何SyncProvider
实现。 应用程序可以通过调用以下代码行来找出已经注册了哪些SyncProvider
实现。java.util.Enumeration providers = SyncFactory.getRegisteredProviders();
一个
CachedRowSet
对象有两种方法来指定它将使用哪个SyncProvider
对象。- 向构造函数提供实现的名称
以下代码CachedRowSet
创建使用默认值初始化的CachedRowSet
对象crs2 ,但其SyncProvider
对象为SyncProvider
。CachedRowSetImpl crs2 = new CachedRowSetImpl( "com.fred.providers.HighAvailabilityProvider");
- 设置
SyncProvider
使用CachedRowSet
方法setSyncProvider
以下代码SyncProvider
重置用于crs的CachedRowSet
对象,该对象是使用默认构造函数创建的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
仅被调用一次,则只需要建立一个连接。4.0更新基础数据源
当执行方法acceptChanges
,CachedRowSet
对象的作者(一个RowSetWriterImpl
对象)被称为幕后,将对行集的更改写入底层数据源。 实现写入程序与数据源建立连接并向其写入更新。如第1节“创建
CachedRowSet
对象”中所述,可以通过实现SyncProvider
接口提供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
发生更改时crs
。6.0将数据传递给瘦客户端
使用CachedRowSet
对象的主要原因之一是在应用程序的不同组件之间传递数据。 因为它是可序列化的,所以可以使用CachedRowSet
对象,例如,将通过网络运行在服务器环境中的企业JavaBeans组件执行的查询的结果发送到在Web浏览器中运行的客户端。当
CachedRowSet
对象断开连接时,它可能比具有相同数据的ResultSet
对象要精简。 因此,它可以特别适用于将数据发送到诸如PDA的瘦客户端,由于资源限制或安全考虑,使用JDBC驱动程序是不合适的。 因此,CachedRowSet
对象提供了一种“获取行”的方法,而不需要实现完整的JDBC API。7.0滚动和更新
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
对象可以被认为是在数据源外被缓存的一组断开连接的行。 薄而可序列化,可以轻松地通过电线发送,非常适合将数据发送到瘦客户端。 但是,一个CachedRowSet
对象确实有一个限制:它的大小受限于可以一次存储在内存中的数据量。8.0获取通用数据访问
CachedRowSet
类的另一个优点是可以从关系数据库以外的来源检索和存储数据。 可以实现行集的读取器,以便从任何表格数据源(包括电子表格或平面文件)的数据读取和填充其行集。 因为可以从头开始创建CachedRowSet
对象及其元数据,所以作为行集的工厂的组件可以使用此功能来创建包含非SQL数据源的数据的行集。 然而,预计大多数时候,CachedRowSet
对象将包含使用JDBC API从SQL数据库中获取的数据。9.0设置属性
所有的行集保持一组属性,通常使用一个工具来设置。 行集的属性数量和种类将会有所不同,具体取决于行集的作用以及获取其数据的方式。 例如,从ResultSet
对象获取其数据的行集需要设置进行数据库连接所需的属性。 如果行集使用DriverManager
工具进行连接,则需要为标识适当驱动程序的JDBC URL设置属性,并且需要设置给出用户名和密码的属性。 另一方面,如果行集使用DataSource
对象进行连接,这是首选方法,则不需要为JDBC URL设置属性。 相反,它需要为数据源的逻辑名称,用户名和密码设置属性。注意:为了使用
DataSource
对象进行连接,DataSource
对象必须已使用使用Java命名和目录接口(JNDI)API的命名服务进行注册。 这种注册通常由以系统管理员身份行事的人员完成。为了能够从数据库填充数据,行集需要设置一个命令属性。 此属性是一个
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
字段中的元素。 以下代码片段演示如何从上一个示例中设置查询中的两个参数。crs.setInt(1, 5000); crs.setString(2, "West");
params
字段现在包含两个元素,每个元素都是一个数组,两个元素长。 第一个元素是参数号; 第二个是要设置的值。 在这种情况下,第一元件params
是1
,5000
,并且所述第二元件是2
,"West"
。 当应用程序调用方法execute
,它将依次调用该RowSet
对象的读取器,这将依次调用其readData
方法。 作为其实现的一部分,readData
将得到值params
,并用它们来设置命令的占位符参数。 以下代码片段给出了读者如何在获得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
这样的方法。 相反,以下代码片段显示了应用程序可能会做什么。 它设置行集的命令,设置命令的参数,并执行命令。 简单地通过调用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,则会一次从数据源中提取五行数据块。 应用程序还可以选择设置一次可能获取的最大行数。 如果最大行数设置为零,或者没有设置最大行数,则每次可以获取的行数没有限制。属性设置完成后,
CachedRowSet
对象必须使用方法populate
或方法execute
填充数据。 以下代码行演示使用方法populate
。 请注意,此版本的方法需要两个参数,一个ResultSet
句柄和ResultSet
对象中的行,用于开始检索行。CachedRowSet crs = new CachedRowSetImpl(); crs.setMaxRows(20); crs.setPageSize(4); crs.populate(rsHandle, 10);
当这个代码运行时, crs将从第十行开始的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 。 然后,应用程序能够以与crs中的数据相同的方式对其进行操作,这与其他任何其他CachedRowSet
对象中的数据操作相同。要访问下一页(数据块),应用程序将调用方法
nextPage
。 此方法创建一个新的CachedRowSet
对象,并将其填充下一页数据。 例如,假设CachedRowSet
对象的命令返回一个具有1000行数据的ResultSet
对象rs 。 如果页面大小已设置为100,则首次调用方法nextPage
将创建一个CachedRowSet
对象,该对象包含前100行的rs 。 在完成前100行中的数据所需的处理之后,应用程序可以再次调用方法nextPage
以创建另一个CachedRowSet
对象,其中第二个100行来自rs 。 来自第一个CachedRowSet
对象的数据将不再在内存中,因为它被替换为第二个CachedRowSet
对象的数据。 在方法nextPage
的第十个调用之后,第10个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
从最后一行导航到每个页面中的第一行。 代码也可以将光标留在每个页面上的第一行之前,然后使用while
循环中的方法next
从第一行到最后一行浏览每个页面。以下代码段假定从上一个代码片段中继续,这意味着第10个
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
-
-
Field Summary
Fields Modifier and Type Field 描述 static boolean
COMMIT_ON_ACCEPT_CHANGES
已过时。因为这个字段是final(它是接口的一部分),所以它的值不能被改变。-
Fields inherited from 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
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 void
acceptChanges()
传播行更新,插入和删除对此CachedRowSet
对象的更改对底层数据源。void
acceptChanges(Connection con)
使用指定的Connection
对象传播所有行更新,插入和删除对此CachedRowSet
对象的数据源的更改,以建立与数据源的连接。boolean
columnUpdated(int idx)
指示此CachedRowSet
对象的当前行中的指定列是否已更新。boolean
columnUpdated(String columnName)
指示此CachedRowSet
对象的当前行中的指定列是否已更新。void
commit()
每个CachedRowSet
对象的SyncProvider
包含ResultSet
或传递给其构造函数的JDBC属性的Connection
对象。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
包含从原来的ResultSet
或传递给它的JDBC属性的Connection
对象。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)
设置SyncProvider
此对象CachedRowSet
对象到指定的一个。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()
如果该行已被修改,立即反转最后一次更新操作。-
Methods inherited from interface javax.sql.rowset.Joinable
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn
-
Methods inherited from interface 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
-
Methods inherited from interface 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
-
Methods inherited from interface java.sql.Wrapper
isWrapperFor, unwrap
-
-
-
-
字段详细信息
-
COMMIT_ON_ACCEPT_CHANGES
@Deprecated static final boolean COMMIT_ON_ACCEPT_CHANGES
已过时。 因为这个字段是final(它是接口的一部分),所以它的值不能被改变。原因CachedRowSet
对象SyncProvider
提交更改时acceptChanges()
被调用。 如果设置为false,则在CachedRowSet
接口事务方法之一之前,将不会提交更改。- 另请参见:
-
commit()
,rollback()
, Constant Field Values
-
-
方法详细信息
-
populate
void populate(ResultSet data) throws SQLException
填充此CachedRowSet
从给定数据对象ResultSet
对象。当应用程序连接到打开的
ResultSet
对象时,此方法可用作execute
方法的替代方法。 使用方法populate
可以比使用不需要参数的版本的execute
方法更有效,因为它不会打开新连接并重新执行此CachedRowSet
对象的命令。 与使用ResultSet
对象的execute
版本相比,使用populate
方法更方便。- 参数
-
data
-所述ResultSet
包含数据对象读入此CachedRowSet
对象 - 异常
-
SQLException
- 如果提供了空值为ResultSet
对象,或者该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
实现应使用SyncFactory
单例来获取提供RowSetWriter
对象(作者)的SyncProvider
实例。 作者将尝试将此CachedRowSet
对象中所做的更改传播回数据源。当方法
acceptChanges
成功执行时,除了写入数据源的更改外,它使当前行中的值为原始行中的值。根据正在使用的
SyncProvider
实现的同步级别,作者将将原始值与数据源中的值进行比较,以检查是否存在冲突。 当有冲突时,RIOptimisticProvider
实现,例如,抛出一个SyncProviderException
并且不写任何数据源。应用程序可能会选择捕获
SyncProviderException
对象并检索其包含的SyncResolver
对象。SyncResolver
对象SyncResolver
列出冲突,并在数据源上设置锁定,以避免在当前冲突解决时发生冲突。 此外,对于每个冲突,它提供了检查冲突并设置应该在数据源中持久存在的值的方法。 所有冲突解决后,应用程序必须再次调用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
将所有行更新,插入和删除备份此更改数据源CachedRowSet
使用指定的对象Connection
对象建立到数据源的连接。acceptChanges
方法的其他版本不会传递连接,因为它使用已在Connection
对象中定义的RowSet
对象,该对象是用于初始填充的连接。这种形式的方法
acceptChanges
类似于不带参数的形式; 然而,与其他形式不同,只有当底层数据源是JDBC数据源时,才能使用此表单。 更新Connection
属性必须由使用SyncProvider
重置RowSetWriter
配置,以确保所述的内容CachedRowSet
对象被正确地同步。当方法
acceptChanges
执行成功时,除了写入对数据源的更改之外,它使当前行中的值为原始行中的值。根据正在使用的
SyncProvider
实现的同步级别,作者将将原始值与数据源中的值进行比较,以检查是否存在冲突。 当有冲突时,RIOptimisticProvider
实现,例如,抛出一个SyncProviderException
,并没有写任何数据源。应用程序可以选择捕获
SyncProviderException
对象并检索其包含的SyncResolver
对象。SyncResolver
对象SyncResolver
列出冲突,并在数据源上设置锁定,以避免在当前冲突解决时发生冲突。 此外,对于每个冲突,它提供了检查冲突并设置应该在数据源中持久存在的值的方法。 所有冲突解决后,应用程序必须再次调用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
对象的所有组件都已完成读取,才能释放内容。 这个CachedRowSet
对象应该在触发rowSetChanged
事件后恢复正常的行为。元数据(包括JDBC属性和同步SPI属性)被维护以备将来使用。 重要的是,诸如
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
- 如果(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
行中的第一行之前或之后的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
实现或专门的Collection
实现,例如TreeMap
对象或Vector
对象来完全表示。 SQLNULL
列值必须表示为Java编程语言中的null
。CachedRowSet
接口的标准参考实现使用行集的TreeMap
对象,每行中的值包含在Vector
对象中。 预计大多数实现将会这样做。TreeMap
类型的收藏保证地图将按照按键顺序升序,按照键的类的自然顺序进行排序。 每个键引用Vector
对应于一个行对象RowSet
对象。 因此,每个Vector
对象的大小必须与RowSet
对象中的列数完全相同。TreeMap
集合使用的密钥由实现决定,该实现可以通过已经在RowSet
对象本身或基础SQL数据上设置的密钥来选择利用内部RowSet
表格结构中可用的集合密钥。- 结果
-
一个
Collection
对象,其中包含此CachedRowSet
对象中每行的值 - 异常
-
SQLException
- 如果产生集合的错误 - 另请参见:
-
toCollection(int)
,toCollection(String)
-
toCollection
Collection<?> toCollection(int column) throws SQLException
将此CachedRowSet
对象中的指定列转换为Collection
对象。 由于Collection
框架的抽象性质,实现方式在如何表示Collection
对象方面有一定的自由度。 每个列值应完全以通用目标Collection
实现或专门的Collection
实现(例如Vector
对象)进行表示。 SQLNULL
列值必须表示为Java编程语言中的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
实现或专门的Collection
实现(例如Vector
对象)来表示。 一个SQLNULL
列值必须用Java编程语言表示为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
方法时,它依次调用读者的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
对象将导致RowSet
对象从SyncFactory
请求新的SyncProvider
实现。 这具有重置所有以前的连接和与始发数据源的关系的效果,并且可能潜在地彻底改变断开的行集的同步行为。- 参数
-
provider
- 一个String
对象,给出SyncProvider
实现的完全限定类名 - 异常
-
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
对象的实现可以从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
不可见。 此外,任何注册此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
包含一个Connection
对象,从原来的ResultSet
或JDBC属性传递给它。将当前事务中所做的所有更改撤回到最后一个
Savepoint
事务标记。 只有当自动提交模式被禁用时,才应该使用此方法。- 参数
-
s
- ASavepoint
交易标记 - 异常
-
SQLException
- 如果发生数据库访问错误或此CachedRowSet
此Connection对象处于自动提交模式。
-
rowSetPopulated
void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException
通知已注册的侦听器给定的RowSetEvent对象中的RowSet对象已经填充了许多其他行。numRows
参数确保这个事件只会被触发numRow
。事件的源可以使用event.getSource方法检索。
- 参数
-
event
- 一个RowSetEvent
对象,其中包含作为事件源的RowSet
对象 -
numRows
- 填充时,CachedRowSet
人口应该触发的行数间隔; 默认值为零; 不能小于fetchSize
或零 - 异常
-
SQLException
-numRows < 0 or numRows < getFetchSize()
-
populate
void populate(ResultSet rs, int startRow) throws SQLException
填充此CachedRowSet
从给定数据对象ResultSet
对象。 虽然与populate(ResultSet)
方法相关,但是提供了一个附加参数,以允许从其中填充CachedRowSet实例的ResultSet
起始位置。当应用程序连接到打开的
ResultSet
对象时,此方法可用作execute
方法的替代方法。 使用方法populate
可以比使用不使用参数的版本的execute
更有效,因为它不会打开新连接并重新执行此CachedRowSet
对象的命令。 与使用ResultSet
对象的execute
版本相比,使用populate
方法更方便。- 参数
-
startRow
-在位置ResultSet
从哪里开始在此填充记录CachedRowSet
-
rs
-所述ResultSet
包含数据对象读入此CachedRowSet
对象 - 异常
-
SQLException
- 如果提供了空值为ResultSet
对象,或者该CachedRowSet
对象无法检索到关联的ResultSetMetaData
对象 - 另请参见:
-
execute(java.sql.Connection)
,populate(ResultSet)
,ResultSet
,ResultSetMetaData
-
setPageSize
void setPageSize(int size) throws SQLException
设置CachedRowSet
对象的页面大小。 ACachedRowSet
可以被配置为在页面大小的批量行中填充自身。 当调用populate()
或execute()
,CachedRowSet
将根据用于填充RowSet的原始SQL查询获取附加页面。- 参数
-
size
-在页面大小CachedRowSet
- 异常
-
SQLException
- 如果出现错误,请设置CachedRowSet
页面大小或页面大小小于0。
-
getPageSize
int getPageSize()
返回CachedRowSet
对象的页面大小- 结果
-
一个
int
页面大小
-
nextPage
boolean nextPage() throws SQLException
增加当前页面的CachedRowSet
。 这将导致CachedRowSet
实现获取下一页大小的行并填充RowSet,如果剩余的行保留在用于填充RowSet的原始SQL查询的范围内。- 结果
- 如果存在更多页面,则为true 如果这是最后一页,则为false
- 异常
-
SQLException
- 如果获取下一页出现错误,或者在填充或执行前是否提前调用此方法。
-
previousPage
boolean previousPage() throws SQLException
减少当前页面的CachedRowSet
。 这将导致CachedRowSet
实现获取上一页大小的行并填充RowSet。 前一页中返回的行数必须始终保留在用于填充RowSet的原始SQL查询的范围内。- 结果
- 如果前一页被成功检索,则为true; 如果这是第一页,则为false。
- 异常
-
SQLException
- if an error occurs fetching the previous page, or if this method is called prematurely before populate or execute.
-
-