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);
}
RowSetMetaDataCachedRowSet通过调用对象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,
wasNullisWrapperFor,
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.absoluteCachedRowSet.firstCachedRowSet.lastSQLException
- 如果(1)当前行尚未被删除,或者(2)光标位于插入行之前,第一行之前或最后一行之后
undoInsert()
,
ResultSet.cancelRowUpdates()
void undoInsert()
throws SQLException
CachedRowSet行从该CachedRowSet对象中删除,并通知侦听器行已更改。
可以在行集的生命周期中的任何时间调用此方法,并假设当前行在异常限制(见下文)内,它将取消当前行的行插入。
此外,可以通过使用任何光标位置控制方法调整光标的位置来进行行插入的多次取消,例如:
CachedRowSet.absoluteCachedRowSet.firstCachedRowSet.lastSQLException
- 如果(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
- 如果获取上一页出现错误,或者在填充或执行前过早调用此方法。