public interface CachedRowSet extends RowSet, Joinable
CachedRowSet
必须实现的接口。
所述的参考实现CachedRowSet
由Oracle公司提供的接口为标准实施。 开发人员可以像这样使用这种实现,它们可以扩展它,或者他们可以选择编写自己的这个接口的实现。
一个CachedRowSet
对象是一个用于将数据行缓存在存储器中的数据行的容器,这使得可以在不一直连接到其数据源的情况下进行操作。 此外,它是一个JavaBeans的组件,并且是可滚动的,可更新的和可序列化的。 CachedRowSet
对象通常包含结果集中的行,但它也可以包含来自任何具有表格格式的文件(如电子表格)的行。 参考实现支持ResultSet
对象获取数据,但开发人员可以扩展SyncProvider
实现以提供对其他表格数据源的访问。
应用程序可以修改CachedRowSet
对象中的数据,然后将这些修改传播回数据源。
一个CachedRowSet
对象是一个断开的行集,这意味着它仅仅使用到其数据源的连接。 它正在读取数据时连接到其数据源,以便在行传播时再次将其自身填充到其底层数据源。 其余的时间,一个CachedRowSet
对象被断开,包括在其数据被修改的同时。 断开连接使RowSet
对象更加精简,因此更容易传递到另一个组件。 例如,断开的RowSet
对象可以被序列化并通过线传递到诸如个人数字助理(PDA)的瘦客户端。
CachedRowSet
对象 CachedRowSet
在参考实现(RI)提供给创建默认CachedRowSet
对象。
CachedRowSetImpl crs = new CachedRowSetImpl();
这个新的CachedRowSet
对象将其属性设置为BaseRowSet
对象的默认属性,此外,它将具有一个RIOptimisticProvider
对象作为其同步提供程序。
RIOptimisticProvider
,RI中包含的两个SyncProvider
实现之一是在没有指定同步提供程序时SyncFactory SyncFactory
例将提供的默认提供程序。
甲SyncProvider
对象提供一个CachedRowSet
物体与读取器(一个RowSetReader
用于从数据源读取数据来填充数据本身对象)。 可以实现读取器从ResultSet
对象或具有表格格式的文件读取数据。 SyncProvider
对象还提供了一个写入器(一个RowSetWriter
对象),用于在与基础数据源中的数据断开连接时对CachedRowSet
对象的数据进行任何修改。
可以实施作家,以便在检查冲突和避免冲突时采取各种程度的谨慎行事。 (当数据源中的某个值已经被修改后,数据源中的某个值已经被修改,就会发生冲突。) RIOptimisticProvider
实现假定没有或没有冲突,因此不设置任何锁定。 它只有在没有冲突时才更新来自CachedRowSet
对象的数据源。 可以实现其他写入器,使得它们总是将修改的数据写入数据源,这可以通过不检查冲突来实现,或者通过设置足以防止数据源中的数据的锁定在频谱的另一端改变了 还有其他作家的实现可以在两者之间。
一个CachedRowSet
对象可以使用任何SyncProvider
已注册与执行SyncFactory
单。 应用程序可以找出哪些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
的意见。
CachedRowSet
对象检索数据 ResultSet
接口的getter方法从CachedRowSet
对象ResultSet
数据。
以下示例中, 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);
}
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
对象。
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
对象中的更改CachedRowSet
回底层数据源,在内部调用RowSet
对象的写入程序来写入数据源的更改。 为此,作者必须花费与该数据源建立连接的费用。 前述两个代码片段调用方法acceptChanges
调用之后立即updateRow
或insertRow
。 但是,当有多行更改时,所有调用updateRow
和insertRow
之后,调用acceptChanges
更为有效。 如果acceptChanges
仅调用一次,则只需要建立一个连接。
acceptChanges
时, CachedRowSet
对象的写入器(一个RowSetWriterImpl
对象)被称为幕后,将对行集所做的更改写入底层数据源。
实现写入程序与数据源建立连接并向其写入更新。
如第1节“创建CachedRowSet
对象”中所讨论的,通过实现SyncProvider接口可以使用SyncProvider
程序。 默认参考实现提供程序, RIOptimisticProvider
,其编写器实现为使用乐观并发控制机制。 也就是说,当数据库与数据库断开连接时,它不会在底层数据库中保持锁定,只需在将数据写入数据源之前检查是否存在任何冲突。 如果有冲突,它不会对数据源写任何东西。
由SyncProvider
类提供的读/写工具是可插拔的,允许定制数据检索和更新。 如果需要不同的并发控制机制, SyncProvider
可以使用方法setSyncProvider
插入不同的setSyncProvider
。
为了使用乐观并发控制例程, RIOptismisticProvider
维护其当前值及其原始值(其紧邻当前值之前的值)。 请注意,如果没有对RowSet
对象中的数据进行RowSet
,则其当前值及其原始值是相同的,两者都是最初RowSet
对象的值。 但是,一旦RowSet
对象中的任何值已更改,当前值和原始值将不同,但在此阶段,原始值仍为初始值。 随后对RowSet
对象中的数据进行任何后续更改,其原始值和当前值仍将不同,但其原始值将是先前为当前值的值。
跟踪原始值允许作者将RowSet
对象的原始值与数据库中的值进行比较。 如果数据库中的值与RowSet
对象的原始值不同,这意味着数据库中的值已更改,则存在冲突。 作家是否检查冲突,检查程度如何,以及处理冲突的方式都取决于实施方式。
BaseRowSet
类的更改。
一个CachedRowSet
对象的侦听器是一个组件,希望在行集中有更改时被通知。
例如,如果一个CachedRowSet
对象包含查询的结果,并且这些结果正在显示在表格和条形图中,则表格和条形图可以被注册为具有行集的侦听器,以便它们可以自动更新反映变化。
要成为监听器,表和条形图类必须实现RowSetListener
接口。
然后可以将它们添加到CachedRowSet
对象的CachedRowSet
器列表中,如以下代码行所示。
crs.addRowSetListener(table);
crs.addRowSetListener(barGraph);
移动光标或更改数据的每个CachedRowSet
方法也会通知已注册的侦听器,所以table
和barGraph
将在crs
发生更改时crs
。
CachedRowSet
对象的主要原因之一是在应用程序的不同CachedRowSet
之间传递数据。
因为它是可序列化的,所以可以使用CachedRowSet
对象,例如,将通过网络运行在服务器环境中的企业JavaBeans组件执行的查询的结果发送到在Web浏览器中运行的客户端。
当一个CachedRowSet
对象断开连接时,它可能比具有相同数据的ResultSet
对象更加精简。 因此,它可以特别适用于将数据发送到诸如PDA的瘦客户端,由于资源限制或安全考虑,使用JDBC驱动程序是不合适的。 因此, CachedRowSet
对象提供了“获取行”的方法,而不需要实现完整的JDBC API。
CachedRowSet
对象的第二个主要用途是为CachedRowSet
对象提供滚动和更新, ResultSet
对象本身不提供这些功能。
换句话说,当DBMS不提供完全支持滚动和更新时,可以使用CachedRowSet
对象来增强启用JDBC技术的驱动程序(以下称为“JDBC驱动程序”)的功能。
为了实现使滚动和只读ResultSet
对象可滚动和更新的效果,程序员只需要创建一个CachedRowSet
ResultSet
对象的数据的ResultSet
对象。
这在以下代码片段中stmt
,其中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
类的另一个优点是可以从关系数据库以外的来源检索和存储数据。
可以实现行集的读取器,以便从任何表格数据源(包括电子表格或平面文件)的数据读取和填充其行集。
因为可以从头开始创建CachedRowSet
对象及其元数据,所以作为行集的工厂的组件可以使用此功能来创建包含非SQL数据源的数据的行集。
然而,预计大多数时候, CachedRowSet
对象将包含使用JDBC API从SQL数据库中获取的数据。
ResultSet
对象获取其数据的行集需要设置进行数据库连接所需的属性。
如果行集使用DriverManager
工具进行连接,则需要为标识适当驱动程序的JDBC URL设置属性,并且需要设置给出用户名和密码的属性。
另一方面,如果行集使用DataSource
对象进行连接,这是首选方法,则不需要为JDBC URL设置属性。
相反,它需要为数据源的逻辑名称,用户名和密码设置属性。
注意:为了使用DataSource
对象进行连接, DataSource
对象必须已被注册到使用Java命名和目录接口(JNDI)API的命名服务。 这种注册通常由以系统管理员身份行事的人员完成。
为了能够从数据库填充数据,行集需要设置一个命令属性。 该属性是一个PreparedStatement
对象的查询,允许查询具有在运行时设置的参数占位符,而不是设计时间。 要使用值设置这些占位符参数,行集提供了用于设置每种数据类型的值的setter方法,类似于PreparedStatement
接口提供的setter方法。
下面的代码片段说明了如何CachedRowSet
对象crs
的command属性设置。 请注意,如果使用工具来设置属性,则这是该工具将使用的代码。
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
之后做出的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();
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
对象中的五行数据。
crs的作者将使用conHandle连接到数据源并执行命令crs 。
然后应用程序就能够在数据CRS,它会在任何其他的数据进行操作的操作方式相同CachedRowSet
对象。
要访问下一页(数据块),应用程序将调用方法nextPage
。 此方法创建一个新的CachedRowSet
对象,并将其填充下一页数据。 例如,假设CachedRowSet
对象的命令返回一个具有1000行数据的ResultSet
对象rs 。 如果页面大小设置为100,则首先调用方法nextPage
将创建一个CachedRowSet
前100行rs的CachedRowSet
对象。 在完成前100行中的数据所需的处理之后,应用程序可以再次调用方法nextPage
创建另一个CachedRowSet
对象,其中第二行是来自rs的 。 来自第一个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
设置为页面大小的行数的CachedRowSet
对象。 因此,例如,方法previousPage
可以在前面的代码片段的末尾的while
循环中使用,以便通过从最后一页到第一页的页面返回。 方法previousPage
也类似于nextPage
,因为它可以在while
循环中使用,除了它返回true
,只要前面有另一个页面和false
当它没有更多的页面。
通过定位光标的最后一行的每一页后,如在下面的代码段完成的,该方法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
}
}
Modifier and Type | Field and Description |
---|---|
static boolean |
COMMIT_ON_ACCEPT_CHANGES
已弃用
因为这个字段是final(它是接口的一部分),所以它的值不能被改变。
|
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 | Method and Description |
---|---|
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 |
createCopySchema()
创建一个
CachedRowSet 对象,该对象是此
CachedRowSet 对象的空白副本。
|
RowSet |
createShared()
返回一个新
RowSet 通过相同的数据与此的支持对象
CachedRowSet 对象。
|
void |
execute(Connection conn)
用数据填充此
CachedRowSet 对象,使用给定的连接生成将从中读取数据的结果集。
|
int[] |
getKeyColumns()
返回一个数组,其中包含一个或多个列号,表示形成唯一标识此
CachedRowSet 对象行的键的列。
|
ResultSet |
getOriginal()
返回一个
ResultSet 此
CachedRowSet 对象的原始值的
CachedRowSet 对象。
|
ResultSet |
getOriginalRow()
返回一个
ResultSet 对象,该对象只包含此
CachedRowSet 对象的当前行的原始值。
|
int |
getPageSize()
返回
CachedRowSet 对象的页面大小
|
RowSetWarning |
getRowSetWarnings()
检索此
RowSet 对象上的呼叫报告的第一个警告。
|
boolean |
getShowDeleted()
检索一个
boolean 指示标记为删除的行是否显示在当前行的集合中。
|
SyncProvider |
getSyncProvider()
检索
SyncProvider 执行此
CachedRowSet 对象。
|
String |
getTableName()
返回用于创建此
CachedRowSet 对象的对象(表)的
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 包含一个
Connection 对象,从原始的
ResultSet 或传递给它的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()
如果该行已被修改,立即反转最后一次更新操作。
|
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
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
isWrapperFor, unwrap
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn
@Deprecated static final boolean COMMIT_ON_ACCEPT_CHANGES
acceptChanges()
时,导致CachedRowSet
对象的SyncProvider
提交更改。
如果设置为false,直到的一个变化将不会提交CachedRowSet
接口交易方法被调用。
commit()
,
rollback()
,
Constant Field Values
void populate(ResultSet data) throws SQLException
CachedRowSet
从给定数据对象ResultSet
对象。
当应用程序连接到打开的ResultSet
对象时,此方法可用作execute
方法的execute
方法。 使用方法populate
可以比使用不采用参数的版本的execute
有效,因为它不会打开新连接并重新执行此CachedRowSet
对象的命令。 与使用ResultSet
对象的execute
版本相比,使用populate
方法更ResultSet
。
data
-所述
ResultSet
包含数据对象读入此
CachedRowSet
对象
SQLException
- 如果提供了一个null的
ResultSet
对象,或者该
CachedRowSet
对象无法检索到关联的
ResultSetMetaData
对象
execute(java.sql.Connection)
, ResultSet
, ResultSetMetaData
void execute(Connection conn) throws SQLException
CachedRowSet
对象,使用给定的连接生成将从中读取数据的结果集。
此方法应关闭其创建的任何数据库连接,以确保此CachedRowSet
对象被断开,除非它从其数据源读取数据或将数据写入其数据源。
该CachedRowSet
对象的读者将使用conn建立与数据源的连接,以便它可以执行行集的命令,并从生成的ResultSet
对象中读取数据到此CachedRowSet
对象。 此方法也会在填充此CachedRowSet
对象后关闭conn 。
如果在已经填充实现的情况下调用此方法,则(重新)设置内容和元数据。 此外,如果在方法acceptChanges
被调用以提交未完成的更新之前调用此方法,则这些更新将丢失。
conn
- 具有有效属性的标准JDBC
Connection
对象
SQLException
- 如果提供了无效的
Connection
对象或建立与数据源的连接时发生错误
populate(java.sql.ResultSet)
, Connection
void acceptChanges() throws SyncProviderException
CachedRowSet
对象的更改对基础数据源。
这个方法要求这个CachedRowSet
对象的作者在幕后进行工作。 标准CachedRowSet
实现应该使用SyncFactory
例来获取提供RowSetWriter
对象(writer)的SyncProvider
实例。 作者将尝试将此CachedRowSet
对象中的更改CachedRowSet
回数据源。
当方法acceptChanges
执行时,除了对数据源进行更改之外,还会使当前行中的值为原始行中的值。
根据正在使用的SyncProvider
实现的同步级别,作者会将原始值与数据源中的值进行比较,以检查冲突。 当有冲突时, RIOptimisticProvider
实现,例如,抛出一个SyncProviderException
,并且不写任何数据源。
应用程序可能会选择捕获SyncProviderException
对象并检索其包含的SyncResolver
对象。 SyncResolver
对象SyncResolver
列出冲突,并在数据源上设置锁定,以避免在当前冲突解决时发生冲突。 此外,对于每个冲突,它提供了检查冲突并设置应该在数据源中持久存在的值的方法。 所有冲突解决后,应用程序必须再次调用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
void acceptChanges(Connection con) throws SyncProviderException
Connection
对象传播所有行更新,插入和删除对此CachedRowSet
对象的数据源的更改,以建立与数据源的连接。
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
- 标准的JDBC
Connection
对象
SyncProviderException
- 如果底层同步提供程序的写入程序无法将更新写回数据源
acceptChanges()
, RowSetWriter
, SyncFactory
, SyncProvider
, SyncProviderException
, SyncResolver
void restoreOriginal() throws SQLException
CachedRowSet
对象恢复为其原始值,即其最后一组更改前的值。
如果行集没有更改或只有一组更改,则原始值是CachedRowSet
此CachedRowSet
对象的值;
否则,原始值是其在当前值之前的值。
调用此方法时, CachedRowSet
实现必须确保将当前行集实例的所有更新,插入和删除替换为以前的值。 此外,光标应该被重置为第一行,并且应该触发一个rowSetChanged
事件来通知所有注册的监听器。
SQLException
- 如果发生错误,则将此
CachedRowSet
对象的当前值推回到其先前的值
RowSetListener.rowSetChanged(javax.sql.RowSetEvent)
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()
void undoDelete() throws SQLException
另外,可以通过使用任何光标位置控制方法来调整光标的位置来进行行删除的多次取消,例如:
CachedRowSet.absolute
CachedRowSet.first
CachedRowSet.last
SQLException
- 如果(1)当前行尚未被删除,或者(2)光标位于插入行之前,第一行之前或最后一行之后
undoInsert()
,
ResultSet.cancelRowUpdates()
void undoInsert() throws SQLException
CachedRowSet
行从该CachedRowSet
对象中删除,并通知侦听器行已更改。
可以在行集的生命周期中的任何时间调用此方法,并假设当前行在异常限制(见下文)内,它将取消当前行的行插入。
此外,可以通过使用任何光标位置控制方法调整光标的位置来进行行插入的多次取消,例如:
CachedRowSet.absolute
CachedRowSet.first
CachedRowSet.last
SQLException
- 如果(1)当前行尚未插入,或者(2)光标位于第一行之前,最后一行之后或插入行上
undoDelete()
,
ResultSet.cancelRowUpdates()
void undoUpdate() throws SQLException
acceptChanges
)或群体之前已经回滚到其状态。
在执行插入行更新时也可以调用此方法。
undoUpdate
可以在行集的生命期间的任何时间调用; 然而,在发生同步之后,该方法直到进一步修改行集数据才有效果。
SQLException
- 如果光标位于第
SQLException
行中或第
CachedRowSet
行中的最后一行之后
undoDelete()
,
undoInsert()
,
ResultSet.cancelRowUpdates()
boolean columnUpdated(int idx) throws SQLException
CachedRowSet
对象的当前行中的指定列是否已更新。
idx
- 一个
int
标识要检查更新的列
true
如果指定列已被明显更新;
false
否则
SQLException
- 如果游标在插入行上,在第一行之前或最后一行之后
DatabaseMetaData.updatesAreDetected(int)
boolean columnUpdated(String columnName) throws SQLException
CachedRowSet
对象的当前行中的指定列是否已更新。
columnName
- 一个
String
对象,给出要检查更新的列的名称
true
如果列已被明显更新;
false
否则
SQLException
- 如果游标在插入行上,在第一行之前或最后一行之后
DatabaseMetaData.updatesAreDetected(int)
Collection<?> toCollection() throws SQLException
CachedRowSet
对象为Collection
包含所有这些对象CachedRowSet
对象的数据。
由于Collection
框架的抽象性,实现方式在Collection
这个Collection
对象方面有一定的自由度。
每行必须完全以通用目的Collection
实现或专门的Collection
实现(例如TreeMap
对象或Vector
对象)进行表示。
一个SQL NULL
列值必须表示为null
的Java编程语言。
对于标准的参考实现CachedRowSet
接口使用TreeMap
对象行集,每个行中的值被包含在Vector
对象。 预计大多数实现将会这样做。
TreeMap
类型的收藏保证了地图将按照升序的顺序,按照键的类的自然顺序进行排序。 每个键引用一个Vector
对应于一个行对象RowSet
对象。 因此,每个Vector
对象的大小必须与RowSet
对象中的列数完全相同。 TreeMap
集合使用的密钥由实现决定,该实现可以通过RowSet
对象本身或底层SQL数据上已设置的密钥来选择利用内部RowSet
表格结构中可用的集合密钥。
Collection
对象,其中包含此
CachedRowSet
对象中每行的值
SQLException
- 如果发生错误发生集合
toCollection(int)
,
toCollection(String)
Collection<?> toCollection(int column) throws SQLException
CachedRowSet
对象中的指定列转换为Collection
对象。
由于Collection
框架的抽象性,实现方式在Collection
这个Collection
对象方面有一定的自由度。
每一列的值应完全用通用目的Collection
实现或专门的Collection
实现,如Vector
对象。
一个SQL NULL
列值必须表示为null
的Java编程语言。
标准参考实现使用Vector
对象来包含列值,并且预计大多数实现将执行相同的操作。 如果使用Vector
对象,则其大小必须与此CachedRowSet
对象中的行数完全相等。
column
- 一个
int
表示其值将在
Collection
对象中表示的
Collection
Collection
对象,其中包含存储在此
CachedRowSet
对象的指定列中的值
SQLException
- 如果生成集合时发生错误或提供了无效的列ID
toCollection()
,
toCollection(String)
Collection<?> toCollection(String column) throws SQLException
CachedRowSet
对象中的指定列转换为Collection
对象。
由于Collection
框架的抽象性质,实现Collection
在如何表示这个Collection
对象方面有一定的自由度。
每个列值应完全以通用目的Collection
实现或专门的Collection
实现(例如Vector
对象)表示。
一个SQL NULL
列值必须表示为null
的Java编程语言。
标准参考实现使用Vector
对象来包含列值,并且预期大多数实现将执行相同操作。 如果使用Vector
对象,则其大小必须与此CachedRowSet
对象中的行数完全相等。
column
- 一个
String
对象,给出其值要在一个集合中表示的列的名称
Collection
对象,其中包含存储在此
CachedRowSet
对象的指定列中的值
SQLException
- 如果生成集合时发生错误或提供了无效的列ID
toCollection()
,
toCollection(int)
SyncProvider getSyncProvider() throws SQLException
SyncProvider
执行此CachedRowSet
对象。
在内部,行方法使用此方法来触发行集和数据源之间的读取或写入操作。
例如,行集可能需要从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)
void setSyncProvider(String provider) throws SQLException
SyncProvider
此对象CachedRowSet
对象到指定的一个。
该方法允许重置SyncProvider
对象。
CachedRowSet
实现应始终使用可用的SyncProvider SyncProvider
实例化,但是有些情况下需要或需要重置SyncProvider
对象。 例如,应用程序可能希望一次使用默认的SyncProvider
对象,然后选择使用最近可用的提供程序,并更好地满足其需求。
重置SyncProvider
对象会导致RowSet
对象从SyncFactory
请求新的SyncProvider
SyncFactory
。 这具有重置所有以前的连接和与始发数据源的关系的效果,并且可能潜在地彻底改变断开的行集的同步行为。
provider
-一个
String
对象给出的完全限定类名
SyncProvider
实施
SQLException
- 如果在尝试重置
SyncProvider
实现时发生错误
getSyncProvider()
int size()
CachedRowSet
对象中的行数。
void setMetaData(RowSetMetaData md) throws SQLException
RowSetMetaData
对象设置此CachedRowSet
对象的元数据。
当RowSetReader
对象正在读取行集的内容时,它将创建一个RowSetMetaData
对象,并使用RowSetMetaData实现中的方法RowSetMetaData
初始化。
参考实现使用RowSetMetaDataImpl
类。
当阅读器完成阅读行集内容时,内部调用此方法将RowSetMetaData
对象传递给行集。
md
- 一个
RowSetMetaData
对象,其中包含有关此
CachedRowSet
对象中的列的元数据
SQLException
- 如果无效的元数据提供给行集
ResultSet getOriginal() throws SQLException
ResultSet
此CachedRowSet
对象的原始值的CachedRowSet
对象。
ResultSet
对象的光标应位于第一行之前。 此外,返回的ResultSet
对象应具有以下属性:
RowSet
对象的原始值是在与底层数据源进行最后一次同步之前的值。 如果没有同步,则原始值将是RowSet
对象的值。 当应用程序调用方法acceptChanges
并且SyncProvider
对象已被实现以检查冲突时,此方法在内部被调用。 如果是这种情况,写入器将原始值与当前数据源中的值进行比较以检查冲突。
ResultSet
对象,其中包含此
CachedRowSet
对象的原始值
SQLException
- 如果发生错误,产生
ResultSet
对象
ResultSet getOriginalRow() throws SQLException
ResultSet
对象,该对象包含仅此CachedRowSet
对象的当前行的原始值。
ResultSet
对象的光标应位于第一行之前。 此外,返回的ResultSet
对象应具有以下属性:
SQLException
- 如果没有当前行
setOriginalRow()
void setOriginalRow() throws SQLException
CachedRowSet
对象中的当前行设置为原始行。
在当前行中的任何修改值与数据源同步之后,此方法被内部调用。 当前行必须被标记为不再插入,删除或更新。
致电setOriginalRow
是不可逆转的。
SQLException
- 如果没有当前行或遇到错误,重置原始行的内容
getOriginalRow()
String getTableName() throws SQLException
CachedRowSet
对象的对象(表)的CachedRowSet
。
该名称可以在多个场合设置,并且规范对这可能发生的次数没有限制,或者标准实现是否应该跟踪先前的表名。
String
对象,给出作为该
CachedRowSet
对象的数据源的表的名称,如果没有为表设置名称,
null
SQLException
- 如果返回表名遇到错误
ResultSetMetaData.getTableName(int)
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
int[] getKeyColumns() throws SQLException
CachedRowSet
对象行的键的列。
CachedRowSet
对象中的一行的主键。
如果没有列代表主键,则此数组应为空。
SQLException
- 如果此
CachedRowSet
对象为空
setKeyColumns(int[])
,
Joinable.getMatchColumnIndexes()
,
Joinable.getMatchColumnNames()
void setKeyColumns(int[] keys) throws SQLException
CachedRowSet
对象的keyCols
字段设置为给定的列号数组,这样形成一个唯一标识该CachedRowSet
对象行的键。
如果一个CachedRowSet
对象成为一个的一部分JoinRowSet
对象,并将所得约束用这种方法定义的键被保持如果列指定为键列也成为匹配列。
keys
-的阵列int
表示形成用于此一主键的列CachedRowSet
对象;
数组中的每个元素必须大于0
且小于或等于此行集中的列数
SQLException
- 如果给定数组中的任何数字对此行集无效
getKeyColumns()
,
Joinable.setMatchColumn(String)
,
Joinable.setMatchColumn(int)
RowSet createShared() throws SQLException
RowSet
通过相同的数据与此的支持对象CachedRowSet
对象。
实际上, CachedRowSet
对象都有一个游标在相同的数据上。
因此,重复的所有更改对原件和任何其他重复项都是可见的,正如原件所做的更改对其所有重复项都可见。
如果一个重复调用一个更改底层数据的方法,它调用的方法通知所有注册的监听器,就像原始的CachedRowSet
对象调用一样。
此外,此方法创建的任何RowSet
对象将具有与此CachedRowSet
对象相同的属性。 例如,如果这个CachedRowSet
对象是只读的,它的所有重复项也将是只读的。 如果更改为可更新,则重复项也可更新。
注意:如果多个线程访问RowSet
从创建的对象createShared()
方法,以下行为被指定为保护共享数据的完整性:读取和写入所有共享的RowSet
目的应被每个对象和单个底层表结构之间连续制造。
RowSet
对象具有与此
CachedRowSet
对象相同的属性,并且具有相同数据的游标
SQLException
- 如果发生错误或基础平台不支持克隆
RowSetEvent
, RowSetListener
CachedRowSet createCopy() throws SQLException
RowSet
对象,这是该CachedRowSet
对象中的数据的深层副本。
与此相反的RowSet
从生成的对象createShared
号召,在原有的副本所做的更新RowSet
对象必须是不可见的原RowSet
对象。
此外,任何在原始RowSet
事件监听RowSet
都不得超过新的RowSet
副本。
另外,必须保持建立的约束限制。
RowSet
对象是这个
CachedRowSet
对象的深层副本,完全独立于此
CachedRowSet
对象
SQLException
- 如果在生成此
CachedRowSet
对象的副本时发生错误
createShared()
, createCopySchema()
, createCopyNoConstraints()
, RowSetEvent
, RowSetListener
CachedRowSet createCopySchema() throws SQLException
CachedRowSet
对象,该对象是该CachedRowSet
对象的空白副本。
副本不得包含任何内容,但仅代表原始CachedRowSet
对象的表结构。
另外,起始CachedRowSet
对象中设置的主键或外键约束必须在新的空的CachedRowSet
对象中同样强制执行。
与此相反的RowSet
从生成的对象createShared
方法调用,更新此副本所做CachedRowSet
与对象createCopySchema
方法不能是可见。
应用程序可以从此方法返回的WebRowSet
对象中形成CachedRowSet
对象,以便将RowSet
模式定义导出为XML以供将来使用。
CachedRowSet
对象的空拷贝
SQLException
- 如果在克隆此
CachedRowSet
对象的结构中发生错误
createShared()
, createCopySchema()
, createCopyNoConstraints()
, RowSetEvent
, RowSetListener
CachedRowSet createCopyNoConstraints() throws SQLException
CachedRowSet
对象,该对象是此CachedRowSet
对象数据的深层副本,但与之无关。
与从createShared
方法调用生成的RowSet
对象不同,对此CachedRowSet
对象的副本的更新不能对其可见。
此外,任何在此CachedRowSet
对象上注册的事件侦听器都不得超过新的RowSet
对象的范围。
此外,对于该建立的任何约束限制CachedRowSet
对象不得在副本中维持。
CachedRowSet
对象,这是这个
CachedRowSet
对象的深层副本,完全独立于这个
CachedRowSet
对象
SQLException
- 如果在生成此
CachedRowSet
对象的副本时发生错误
createCopy()
, createShared()
, createCopySchema()
, RowSetEvent
, RowSetListener
RowSetWarning getRowSetWarnings() throws SQLException
RowSet
对象的呼叫报告的第一个警告。
此RowSet
对象的后续警告将链接到此方法返回的RowSetWarning
对象。
每次阅读新行时,警告链都会自动清除。
对已经关闭的RowSet对象可能不调用此方法;
这样做会造成SQLException
被抛出。
RowSetWarning
报告的第一个
RowSetWarning
对象,如果没有,则返回null
SQLException
- 如果这个方法在一个封闭的RowSet上被调用
RowSetWarning
boolean getShowDeleted() throws SQLException
boolean
指示标记为删除的行是否显示在当前行的集合中。
如果返回true
,则删除的行与当前行可见。
如果返回false
,则行与当前行的集合不可见。
默认值为false
。
由于安全考虑或标准行集实现可能会选择限制此行为,或者更适合某些部署方案。 这被定义为实现,并不代表标准行为。
注意:允许删除的行保持可见使一些标准JDBC RowSet
实现方法的行为RowSet
化。 然而,大多数行集用户可以简单地忽略这个额外的细节,因为只有非常专门的应用程序可能希望利用此功能。
true
如果删除的行是可见的;
false
否则
SQLException
- 如果行集实现无法确定标记为删除的行是否可见
setShowDeleted(boolean)
void setShowDeleted(boolean b) throws SQLException
showDeleted
设置为给定的boolean
值,该值确定标记为删除的行是否显示在当前行的集合中。
如果值设置为true
,则删除的行将立即与当前行的集合一起显示。
如果该值设置为false
,则删除的行将被设置为与当前行集不可见。
由于安全考虑或标准行集实现可能会选择限制此行为,或者更适合某些部署方案。 这被定义为实现,并不代表标准行为。
b
- true
如果删除的行应该显示;
false
否则
SQLException
- 如果行集实现无法重置删除的行是否应该可见
getShowDeleted()
void commit() throws SQLException
CachedRowSet
对象的SyncProvider
包含一个Connection
对象从ResultSet
或JDBC属性传递给它的构造函数。
此方法包含Connection
提交方法,以允许灵活的自动提交或非自动提交事务控制支持。
进行acceptChanges()
方法执行的所有更改,因为先前的提交/回滚永久性。 只有当自动提交模式被禁用时,才应该使用此方法。
SQLException
- 如果发生数据库访问错误或此CachedRowSet内的此
CachedRowSet
对象处于自动提交模式
Connection.setAutoCommit(boolean)
void rollback() throws SQLException
CachedRowSet
对象的SyncProvider
包含来自原始ResultSet
或传递给它的JDBC属性的Connection
对象。
撤消在当前事务中所做的所有更改。 只有当自动提交模式被禁用时,才应该使用此方法。
SQLException
- 如果发生数据库访问错误或此CachedRowSet内的此
CachedRowSet
对象处于自动提交模式。
void rollback(Savepoint s) throws SQLException
CachedRowSet
对象的SyncProvider
包含一个Connection
对象,从原始的ResultSet
或传递给它的JDBC属性。
将当前事务中所做的所有更改撤回到最后一个Savepoint
事务标记。 只有当自动提交模式被禁用时,才应该使用此方法。
s
- A
Savepoint
交易标记
SQLException
-如果发生数据库访问错误或者此内的Connection对象
CachedRowSet
是在自动提交模式。
void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException
numRows
参数确保此事件将仅在每个numRow
。
事件的源可以使用event.getSource方法检索。
event
- 一个
RowSetEvent
对象,其中包含作为事件源的
RowSet
对象
numRows
-填充时,行间隔的数目在其上CachedRowSet
填充应该火;
默认值为零;
不能小于fetchSize
或零
SQLException
-
numRows < 0 or numRows < getFetchSize()
void populate(ResultSet rs, int startRow) throws SQLException
CachedRowSet
从给定数据对象ResultSet
对象。
而相关的populate(ResultSet)
显示方法,追加参数以允许启动内的位置ResultSet
从那里到数据填充CachedRowSet实例。
当应用程序连接到打开的ResultSet
对象时,此方法可用作execute
方法的execute
方法。 使用方法populate
可以比使用不具有参数的版本的execute
方法更有效,因为它不会打开新连接并重新执行此CachedRowSet
对象的命令。 与使用ResultSet
对象的execute
版本相比,使用populate
方法更ResultSet
。
startRow
-在位置
ResultSet
从哪里开始在此填充记录
CachedRowSet
rs
-所述
ResultSet
包含数据对象读入此
CachedRowSet
对象
SQLException
- 如果提供了空值为
ResultSet
对象,或者该
CachedRowSet
对象无法检索到关联的
ResultSetMetaData
对象
execute(java.sql.Connection)
, populate(ResultSet)
, ResultSet
, ResultSetMetaData
void setPageSize(int size) throws SQLException
CachedRowSet
对象的页面大小。
A CachedRowSet
可以被配置为以页面大小的批量批量填充自身。
当任populate()
或execute()
被调用, CachedRowSet
根据用于填充RowSet的原始SQL查询获取额外的页面。
size
-在页面大小
CachedRowSet
SQLException
- 如果设置
CachedRowSet
页面大小或页面大小小于0时发生错误。
int getPageSize()
CachedRowSet
对象的页面大小
int
页面大小
boolean nextPage() throws SQLException
CachedRowSet
。
这将导致CachedRowSet
实现获取下一个页面大小的行并填充RowSet,如果剩余行仍在用于填充RowSet的原始SQL查询范围内。
SQLException
- 如果获取下一页出现错误,或者在填充或执行之前过早调用此方法。
boolean previousPage() throws SQLException
CachedRowSet
。
这将导致CachedRowSet
实现获取前一个页面大小的行并填充RowSet。
前一页中返回的行数必须始终保留在用于填充RowSet的原始SQL查询的范围内。
SQLException
- 如果获取上一页出现错误,或者在填充或执行前过早调用此方法。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.