uTools-Manuals/docs/java/javax/sql/rowset/CachedRowSet.html

1960 lines
154 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="header">
<div class="subTitle">
compact3
</div>
<div class="subTitle">
javax.sql.rowset
</div>
<h2 class="title" title="Interface CachedRowSet">Interface CachedRowSet</h2>
</div><div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>
All Superinterfaces:
</dt>
<dd>
<span><a href="../../../java/lang/AutoCloseable.html" title="java.lang中的接口">AutoCloseable</a> <a href="../../../javax/sql/rowset/Joinable.html" title="javax.sql.rowset中的接口">Joinable</a> <a href="../../../java/sql/ResultSet.html" title="java.sql中的接口">ResultSet</a> <a href="../../../javax/sql/RowSet.html" title="javax.sql中的接口">RowSet</a> <a href="../../../java/sql/Wrapper.html" title="java.sql中的接口">Wrapper</a></span>
</dd>
</dl>
<dl>
<dt>
All Known Subinterfaces:
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/FilteredRowSet.html" title="javax.sql.rowset中的接口">FilteredRowSet</a> <a href="../../../javax/sql/rowset/JoinRowSet.html" title="javax.sql.rowset中的接口">JoinRowSet</a> <a href="../../../javax/sql/rowset/WebRowSet.html" title="javax.sql.rowset中的接口">WebRowSet</a></span>
</dd>
</dl>
<hr/> <br/> <pre>public interface <span class="typeNameLabel">CachedRowSet</span>
extends <a href="../../../javax/sql/RowSet.html" title="interface in javax.sql">RowSet</a>, <a href="../../../javax/sql/rowset/Joinable.html" title="interface in javax.sql.rowset">Joinable</a></pre>
<div class="block">
<span>CachedRowSet的所有标准<code>CachedRowSet</code>必须实现的接口。</span>
<p> <span>所述的参考实现<code>CachedRowSet</code>由Oracle公司提供的接口为标准实施。</span> <span>开发人员可以像这样使用这种实现,它们可以扩展它,或者他们可以选择编写自己的这个接口的实现。</span> </p>
<p> <span>一个<code>CachedRowSet</code>对象是一个用于将数据行缓存在存储器中的数据行的容器,这使得可以在不一直连接到其数据源的情况下进行操作。</span> <span>此外它是一个JavaBeans的组件并且是可滚动的可更新的和可序列化的。</span> <span><code>CachedRowSet</code>对象通常包含结果集中的行,但它也可以包含来自任何具有表格格式的文件(如电子表格)的行。</span> <span>参考实现支持<code>ResultSet</code>对象获取数据,但开发人员可以扩展<code>SyncProvider</code>实现以提供对其他表格数据源的访问。</span> </p>
<p> <span>应用程序可以修改<code>CachedRowSet</code>对象中的数据,然后将这些修改传播回数据源。</span> </p>
<p> <span>一个<code>CachedRowSet</code>对象是一个<i>断开的</i>行集,这意味着它仅仅使用到其数据源的连接。</span> <span>它正在读取数据时连接到其数据源,以便在行传播时再次将其自身填充到其底层数据源。</span> <span>其余的时间,一个<code>CachedRowSet</code>对象被断开,包括在其数据被修改的同时。</span> <span>断开连接使<code>RowSet</code>对象更加精简,因此更容易传递到另一个组件。</span> <span>例如,断开的<code>RowSet</code>对象可以被序列化并通过线传递到诸如个人数字助理PDA的瘦客户端。</span> </p>
<h3> <span>1.0创建一个<code>CachedRowSet</code>对象</span> </h3>
<span>下面的代码行使用默认构造<code>CachedRowSet</code>在参考实现RI提供给创建默认<code>CachedRowSet</code>对象。</span>
<pre> <span>CachedRowSetImpl crs = new CachedRowSetImpl();</span> </pre>
<span>这个新的<code>CachedRowSet</code>对象将其属性设置为<code>BaseRowSet</code>对象的默认属性,此外,它将具有一个<code>RIOptimisticProvider</code>对象作为其同步提供程序。</span>
<span><code>RIOptimisticProvider</code> RI中包含的两个<code>SyncProvider</code>实现之一是在没有指定同步提供程序时SyncFactory <code>SyncFactory</code>例将提供的默认提供程序。</span>
<p> <span><code>SyncProvider</code>对象提供一个<code>CachedRowSet</code>物体与读取器(一个<code>RowSetReader</code>用于从数据源读取数据来填充数据本身对象)。</span> <span>可以实现读取器从<code>ResultSet</code>对象或具有表格格式的文件读取数据。</span> <span><code>SyncProvider</code>对象还提供了一个写入器(一个<code>RowSetWriter</code>对象),用于在与基础数据源中的数据断开连接时对<code>CachedRowSet</code>对象的数据进行任何修改。</span> </p>
<p> <span>可以实施作家,以便在检查冲突和避免冲突时采取各种程度的谨慎行事。</span> <span>(当数据源中的某个值已经被修改后,数据源中的某个值已经被修改,就会发生冲突。) <code>RIOptimisticProvider</code>实现假定没有或没有冲突,因此不设置任何锁定。</span> <span>它只有在没有冲突时才更新来自<code>CachedRowSet</code>对象的数据源。</span> <span>可以实现其他写入器,使得它们总是将修改的数据写入数据源,这可以通过不检查冲突来实现,或者通过设置足以防止数据源中的数据的锁定在频谱的另一端改变了</span> <span>还有其他作家的实现可以在两者之间。</span> </p>
<p> <span>一个<code>CachedRowSet</code>对象可以使用任何<code>SyncProvider</code>已注册与执行<code>SyncFactory</code>单。</span> <span>应用程序可以找出哪些<code>SyncProvider</code>实现已经通过调用下面的代码行注册。</span> </p>
<pre> <span>java.util.Enumeration providers = SyncFactory.getRegisteredProviders();</span> </pre>
<p> <span>一个<code>CachedRowSet</code>对象有两种方式来指定它将使用哪个<code>SyncProvider</code>对象。</span> </p>
<ul>
<li> <span>向构造函数提供实现的名称</span> <br/> <span>以下代码<code>CachedRowSet</code>创建使用默认值<i>初始化</i><code>CachedRowSet</code>对象<i>crs2</i> ,但其<code>SyncProvider</code>对象为SyncProvider。</span> <pre> <span>CachedRowSetImpl crs2 = new CachedRowSetImpl(
"com.fred.providers.HighAvailabilityProvider");</span> </pre></li>
<li> <span>设置<code>SyncProvider</code>使用<code>CachedRowSet</code>方法<code>setSyncProvider</code></span> <br/> <span>以下代码<code>SyncProvider</code>重置用于<i>crs</i><code>CachedRowSet</code>对象,即使用默认构造函数创建的<code>CachedRowSet</code>对象。</span> <pre> <span>crs.setSyncProvider("com.fred.providers.HighAvailabilityProvider");</span> </pre></li>
</ul>
<span>有关详细信息,请参阅<code>SyncFactory</code><code>SyncProvider</code>的意见。</span>
<h3> <span>2.0从<code>CachedRowSet</code>对象检索数据</span> </h3>
<span>通过使用继承自<code>ResultSet</code>接口的getter方法从<code>CachedRowSet</code>对象<code>ResultSet</code>数据。</span>
<span>以下示例中, <code>crs</code>是一个<code>CachedRowSet</code>对象,演示如何遍历行,检索每行中的列值。</span>
<span>第一个例子使用取值列表的getter方法的版本;</span>
<span>第二个示例使用具有列名称的版本。</span>
<span>列号通常用于当<code>RowSet</code>对象的命令的形式为<code>SELECT * FROM TABLENAME</code> ;</span>
<span>当命令按名称指定列时,列名最常用。</span>
<pre> <span>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);
}</span> </pre>
<pre> <span>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);
}</span> </pre>
<h4> <span>2.1检索<code>RowSetMetaData</code></span> </h4>
<span>应用程序可以获取有关在列信息<code>CachedRowSet</code>通过调用对象<code>ResultSetMetaData</code><code>RowSetMetaData</code>一个上的方法<code>RowSetMetaData</code>对象。</span>
<span>以下代码片段(其中<i>crs</i>是一个<code>CachedRowSet</code>对象)说明了该过程。</span>
<span>第一行创建一个<code>RowSetMetaData</code>对象,其中包含关于<i>crs中</i>的列的信息。</span>
<span><code>ResultSet</code>继承的方法<code>getMetaData</code>返回一个<code>ResultSetMetaData</code>对象,该对象在分配给变量<i>rsmd</i>之前被转换为<code>RowSetMetaData</code>对象。</span>
<span>第二行找到<i>jrs</i>有多少列,第三行获取存储在<code>jrs</code>的第二列中的JDBC类型的值。</span>
<pre> <span>RowSetMetaData rsmd = (RowSetMetaData)crs.getMetaData();
int count = rsmd.getColumnCount();
int type = rsmd.getColumnType(2);</span> </pre>
<span><code>RowSetMetaData</code>接口不同于<code>ResultSetMetaData</code>两种方式接口。</span>
<ul>
<li> <span><i>它包括<code>setter</code>方法:</i>当一个<code>RowSet</code>对象使用来自不同的<code>ResultSet</code>对象的数据填充时,内部使用这些方法。</span> </li>
<li> <span><i>它包含较少的<code>getter</code>方法:</i>某些<code>ResultSetMetaData</code>方法不适用于<code>RowSet</code>对象。</span> <span>例如,检索列值是可写入还是只读的方法不适用,因为<code>RowSet</code>对象的列都将是可写的或只读的,具体取决于行集是否可更新。</span> </li>
</ul>
<span>注意:为了返回一个<code>RowSetMetaData</code>对象,实现必须重写<code>getMetaData()</code>中定义的方法<code>java.sql.ResultSet</code>并返回一个<code>RowSetMetaData</code>对象。</span>
<h3> <span>3.0更新<code>CachedRowSet</code>对象</span> </h3>
<span>更新<code>CachedRowSet</code>对象类似于更新<code>ResultSet</code>对象,但是由于行集在更新时未连接到其数据源,因此必须采取额外的步骤来实现其底层数据源的更改。</span>
<span>在调用方法<code>updateRow</code><code>insertRow</code>之后, <code>CachedRowSet</code>对象还必须调用方法<code>acceptChanges</code>以将更新写入数据源。</span>
<span>以下示例,其中游标位于<code>CachedRowSet</code>对象<i>crs</i>中的行上,显示了更新当前行中的两列值所需的代码,并更新了<code>RowSet</code>对象的底层数据源。</span>
<pre> <span>crs.updateShort(3, 58);
crs.updateInt(4, 150000);
crs.updateRow();
crs.acceptChanges();</span> </pre>
<p> <span>下一个示例演示移动到插入行,在插入行上构建一个新行,将其插入到行集中,然后调用方法<code>acceptChanges</code>将新行添加到底层数据源。</span> <span>请注意与getter方法一样updater方法可以使用列索引或列名来指定正在执行的列。</span> </p>
<pre> <span>crs.moveToInsertRow();
crs.updateString("Name", "Shakespeare");
crs.updateInt("ID", 10098347);
crs.updateShort("Age", 58);
crs.updateInt("Sal", 150000);
crs.insertRow();
crs.moveToCurrentRow();
crs.acceptChanges();</span> </pre>
<p> <span>注意: <code>insertRow()</code>方法插入一个<code>CachedRowSet</code>对象的插入行的内容是实现定义的。</span> <span>为参考实现<code>CachedRowSet</code>接口插入新行立即当前行之后,但它可以实现为在任何其他地方插入新行。</span> </p>
<p> <span>关于这些例子的另一件事是他们如何使用方法<code>acceptChanges</code></span> <span>正是这种方法将<code>CachedRowSet</code>对象中的更改<code>CachedRowSet</code>回底层数据源,在内部调用<code>RowSet</code>对象的写入程序来写入数据源的更改。</span> <span>为此,作者必须花费与该数据源建立连接的费用。</span> <span>前述两个代码片段调用方法<code>acceptChanges</code>调用之后立即<code>updateRow</code><code>insertRow</code></span> <span>但是,当有多行更改时,所有调用<code>updateRow</code><code>insertRow</code>之后,调用<code>acceptChanges</code>更为有效。</span> <span>如果<code>acceptChanges</code>仅调用一次,则只需要建立一个连接。</span> </p>
<h3> <span>4.0更新基础数据源</span> </h3>
<span>执行方法<code>acceptChanges</code>时, <code>CachedRowSet</code>对象的写入器(一个<code>RowSetWriterImpl</code>对象)被称为幕后,将对行集所做的更改写入底层数据源。</span>
<span>实现写入程序与数据源建立连接并向其写入更新。</span>
<p> <span>如第1节“创建<code>CachedRowSet</code>对象”中所讨论的通过实现SyncProvider接口可以使用<code>SyncProvider</code>程序。</span> <span>默认参考实现提供程序, <code>RIOptimisticProvider</code> ,其编写器实现为使用乐观并发控制机制。</span> <span>也就是说,当数据库与数据库断开连接时,它不会在底层数据库中保持锁定,只需在将数据写入数据源之前检查是否存在任何冲突。</span> <span>如果有冲突,它不会对数据源写任何东西。</span> </p>
<p> <span><code>SyncProvider</code>类提供的读/写工具是可插拔的,允许定制数据检索和更新。</span> <span>如果需要不同的并发控制机制, <code>SyncProvider</code>可以使用方法<code>setSyncProvider</code>插入不同的<code>setSyncProvider</code></span> </p>
<p> <span>为了使用乐观并发控制例程, <code>RIOptismisticProvider</code>维护其当前值及其原始值(其紧邻当前值之前的值)。</span> <span>请注意,如果没有对<code>RowSet</code>对象中的数据进行<code>RowSet</code> ,则其当前值及其原始值是相同的,两者都是最初<code>RowSet</code>对象的值。</span> <span>但是,一旦<code>RowSet</code>对象中的任何值已更改,当前值和原始值将不同,但在此阶段,原始值仍为初始值。</span> <span>随后对<code>RowSet</code>对象中的数据进行任何后续更改,其原始值和当前值仍将不同,但其原始值将是先前为当前值的值。</span> </p>
<p> <span>跟踪原始值允许作者将<code>RowSet</code>对象的原始值与数据库中的值进行比较。</span> <span>如果数据库中的值与<code>RowSet</code>对象的原始值不同,这意味着数据库中的值已更改,则存在冲突。</span> <span>作家是否检查冲突,检查程度如何,以及处理冲突的方式都取决于实施方式。</span> </p>
<h3> <span>5.0注册和通知听众</span> </h3>
<span>作为JavaBeans组件所有的行集都参与到JavaBeans事件模型中继承了注册侦听器的方法并向他们通知了<code>BaseRowSet</code>类的更改。</span>
<span>一个<code>CachedRowSet</code>对象的侦听器是一个组件,希望在行集中有更改时被通知。</span>
<span>例如,如果一个<code>CachedRowSet</code>对象包含查询的结果,并且这些结果正在显示在表格和条形图中,则表格和条形图可以被注册为具有行集的侦听器,以便它们可以自动更新反映变化。</span>
<span>要成为监听器,表和条形图类必须实现<code>RowSetListener</code>接口。</span>
<span>然后可以将它们添加到<code>CachedRowSet</code>对象的<code>CachedRowSet</code>器列表中,如以下代码行所示。</span>
<pre> <span>crs.addRowSetListener(table);
crs.addRowSetListener(barGraph);</span> </pre>
<span>移动光标或更改数据的每个<code>CachedRowSet</code>方法也会通知已注册的侦听器,所以<code>table</code><code>barGraph</code>将在<code>crs</code>发生更改时<code>crs</code></span>
<h3> <span>6.0将数据传递给瘦客户端</span> </h3>
<span>使用<code>CachedRowSet</code>对象的主要原因之一是在应用程序的不同<code>CachedRowSet</code>之间传递数据。</span>
<span>因为它是可序列化的,所以可以使用<code>CachedRowSet</code>对象例如将通过网络运行在服务器环境中的企业JavaBeans组件执行的查询的结果发送到在Web浏览器中运行的客户端。</span>
<p> <span>当一个<code>CachedRowSet</code>对象断开连接时,它可能比具有相同数据的<code>ResultSet</code>对象更加精简。</span> <span>因此它可以特别适用于将数据发送到诸如PDA的瘦客户端由于资源限制或安全考虑使用JDBC驱动程序是不合适的。</span> <span>因此, <code>CachedRowSet</code>对象提供了“获取行”的方法而不需要实现完整的JDBC API。</span> </p>
<h3> <span>7.0滚动和更新</span> </h3>
<span><code>CachedRowSet</code>对象的第二个主要用途是为<code>CachedRowSet</code>对象提供滚动和更新, <code>ResultSet</code>对象本身不提供这些功能。</span>
<span>换句话说当DBMS不提供完全支持滚动和更新时可以使用<code>CachedRowSet</code>对象来增强启用JDBC技术的驱动程序以下称为“JDBC驱动程序”的功能。</span>
<span>为了实现使滚动和只读<code>ResultSet</code>对象可滚动和更新的效果,程序员只需要创建一个<code>CachedRowSet</code> <code>ResultSet</code>对象的数据的<code>ResultSet</code>对象。</span>
<span>这在以下代码片段中<code>stmt</code> ,其中<code>stmt</code><code>Statement</code>对象。</span>
<pre> <span>ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES");
CachedRowSetImpl crs = new CachedRowSetImpl();
crs.populate(rs);</span> </pre>
<p> <span>对象<code>crs</code>现在包含来自表<code>EMPLOYEES</code>的数据,就像对象<code>rs</code>那样。</span> <span>不同的是,光标为<code>crs</code>可以向前移动,向后,或到特定行即使光标为<code>rs</code>只能前进。</span> <span>另外<code>crs</code>可以更新,即使<code>rs</code>不是因为默认情况下,一个<code>CachedRowSet</code>对象既可滚动又可更新。</span> </p>
<p> <span>总而言之,一个<code>CachedRowSet</code>对象可以被认为是一个被隔离的一组行,这些行被缓存在数据源之外。</span> <span>薄而可序列化,可以轻松地通过电线发送,非常适合将数据发送到瘦客户端。</span> <span>但是, <code>CachedRowSet</code>对象确实有一个限制:它的大小受限于可以一次存储在内存中的数据量。</span> </p>
<h3> <span>8.0获取通用数据访问</span> </h3>
<span><code>CachedRowSet</code>类的另一个优点是可以从关系数据库以外的来源检索和存储数据。</span>
<span>可以实现行集的读取器,以便从任何表格数据源(包括电子表格或平面文件)的数据读取和填充其行集。</span>
<span>因为可以从头开始创建<code>CachedRowSet</code>对象及其元数据所以作为行集的工厂的组件可以使用此功能来创建包含非SQL数据源的数据的行集。</span>
<span>然而,预计大多数时候, <code>CachedRowSet</code>对象将包含使用JDBC API从SQL数据库中获取的数据。</span>
<h3> <span>9.0设置属性</span> </h3>
<span>所有的行集保持一组属性,通常使用一个工具来设置。</span>
<span>行集的属性数量和种类将会有所不同,具体取决于行集的作用以及获取其数据的方式。</span>
<span>例如,从<code>ResultSet</code>对象获取其数据的行集需要设置进行数据库连接所需的属性。</span>
<span>如果行集使用<code>DriverManager</code>工具进行连接则需要为标识适当驱动程序的JDBC URL设置属性并且需要设置给出用户名和密码的属性。</span>
<span>另一方面,如果行集使用<code>DataSource</code>对象进行连接这是首选方法则不需要为JDBC URL设置属性。</span>
<span>相反,它需要为数据源的逻辑名称,用户名和密码设置属性。</span>
<p> <span>注意:为了使用<code>DataSource</code>对象进行连接, <code>DataSource</code>对象必须已被注册到使用Java命名和目录接口JNDIAPI的命名服务。</span> <span>这种注册通常由以系统管理员身份行事的人员完成。</span> </p>
<p> <span>为了能够从数据库填充数据,行集需要设置一个命令属性。</span> <span>该属性是一个<code>PreparedStatement</code>对象的查询,允许查询具有在运行时设置的参数占位符,而不是设计时间。</span> <span>要使用值设置这些占位符参数行集提供了用于设置每种数据类型的值的setter方法类似于<code>PreparedStatement</code>接口提供的setter方法。</span> </p>
<p> <span>下面的代码片段说明了如何<code>CachedRowSet</code>对象<code>crs</code>的command属性设置。</span> <span>请注意,如果使用工具来设置属性,则这是该工具将使用的代码。</span> </p>
<pre> <span><code> crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS " + "WHERE CREDIT_LIMIT &gt; ? AND REGION = ?"); </code></span> </pre>
<p> <span>将用于设置命令占位符参数的值包含在<code>RowSet</code>对象的<code>params</code>字段中,它是一个<code>Vector</code>对象。</span> <span><code>CachedRowSet</code>类提供了一组设置方法,用于在其<code>params</code>字段中设置元素。</span> <span>以下代码片段演示如何从上一个示例中设置查询中的两个参数。</span> </p>
<pre> <span>crs.setInt(1, 5000);
crs.setString(2, "West");</span> </pre>
<p> <span><code>params</code>字段现在包含两个元素,每个元素都是一个数组两个元素长。</span> <span>第一个元素是参数号;</span> <span>第二个是要设置的值。</span> <span>在这种情况下,第一元件<code>params</code><code>1</code> <code>5000</code> ,并且所述第二元件是<code>2</code> <code>"West"</code></span> <span>当应用程序调用方法<code>execute</code>时,它将依次调用此<code>RowSet</code>对象的读取器,这将依次调用其<code>readData</code>方法。</span> <span>作为其实现的一部分, <code>readData</code>将得到值<code>params</code> ,并用它们来设置命令的占位符参数。</span> <span>以下代码片段提供了读者如何在获得<code>Connection</code>对象<code>con</code>之后做出的<code>con</code></span> </p>
<pre> <span><code> 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 &lt; params.length; i++) { // pstmt.setObject(i + 1, params[i]); // } </code></span> </pre>
<p> <span>此时, <code>crs</code>的命令是查询<code>"SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS WHERE CREDIT_LIMIT &gt; 5000 AND REGION = "West"</code></span> <span><code>readData</code>方法执行此命令后,使用以下代码行,它将具有<code>rs</code>的数据,用于填充<code>crs</code></span> </p>
<pre> <span><code> ResultSet rs = pstmt.executeQuery(); </code></span> </pre>
<p> <span>前面的代码片段给出了幕后发生的一些想法;</span> <span>它们不会出现在应用程序中,而不会调用诸如<code>readData</code><code>decodeParams</code>类的方法。</span> <span>相反,以下代码片段显示了应用程序可能会做什么。</span> <span>它设置行集的命令,设置命令的参数,并执行命令。</span> <span>简单地通过调用<code>execute</code>方法, <code>crs</code>填充了表<code>CUSTOMERS</code>所要求的数据。</span> </p>
<pre> <span><code> crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS" + "WHERE CREDIT_LIMIT &gt; ? AND REGION = ?"); crs.setInt(1, 5000); crs.setString(2, "West"); crs.execute(); </code></span> </pre>
<h3> <span>10.0分页数据</span> </h3>
<span>因为<code>CachedRowSet</code>对象将数据存储在内存中,所以可以在任何一个时间内包含的数据量由可用内存量决定。</span>
<span>为了解决这个限制,一个<code>CachedRowSet</code>对象可以从被称为<i>页面</i>的数据块中检索一个<code>ResultSet</code>对象的数据。</span>
<span>要利用此机制,应用程序使用方法<code>setPageSize</code>设置要包含在页面中的行数。</span>
<span>换句话说如果页面大小设置为5则会一次从数据源中提取五行数据块。</span>
<span>应用程序还可以选择设置一次可能获取的最大行数。</span>
<span>如果最大行数设置为零,或者没有设置最大行数,则每次可以获取的行数没有限制。</span>
<p> <span>属性设置完成后, <code>CachedRowSet</code>对象必须使用方法<code>populate</code>或方法<code>execute</code></span> <span>以下代码行演示使用方法<code>populate</code></span> <span>请注意,此版本的方法需要两个参数: <code>ResultSet</code>句柄和<code>ResultSet</code>对象中从中开始检索行的行。</span> </p>
<pre> <span>CachedRowSet crs = new CachedRowSetImpl();
crs.setMaxRows(20);
crs.setPageSize(4);
crs.populate(rsHandle, 10);</span> </pre>
<span>当这个代码运行时, <i>crs</i>将从第十行开始从<i>rsHandle中填入四行</i></span>
<p> <span>下一个代码片段显示了使用方法<code>execute</code>填充一个<code>CachedRowSet</code>对象,该方法可能或可能不将<code>Connection</code>对象作为参数。</span> <span>此代码传递<code>execute</code><code>Connection</code>对象<i>conHandle。</i></span> </p>
<p> <span>请注意,以下代码片段和前一个代码片段之间有两个区别。</span> <span>首先,方法<code>setMaxRows</code>未被调用,因此对于<i>crs</i>可能包含的行数没有限制。</span> <span>(请记住<i>CRS</i>总是有多少数据可以存储在内存中的最高限制。)第二个区别是,你无法通过该方法<code>execute</code>行中的数<code>ResultSet</code>对象从开始检索行。</span> <span>该方法始终以第一行开头。</span> </p>
<pre> <span>CachedRowSet crs = new CachedRowSetImpl();
crs.setPageSize(5);
crs.execute(conHandle);</span> </pre>
<span>此代码运行后, <i>crs</i>将包含由<i>crs</i>命令生成的<code>ResultSet</code>对象中的五行数据。</span>
<span><i>crs</i>的作者将使用<i>conHandle</i>连接到数据源并执行命令<i>crs</i></span>
<span>然后应用程序就能够在数据<i>CRS</i>它会在任何其他的数据进行操作的操作方式相同<code>CachedRowSet</code>对象。</span>
<p> <span>要访问下一页(数据块),应用程序将调用方法<code>nextPage</code></span> <span>此方法创建一个新的<code>CachedRowSet</code>对象,并将其填充下一页数据。</span> <span>例如,假设<code>CachedRowSet</code>对象的命令返回一个具有1000行数据的<code>ResultSet</code>对象<i>rs</i></span> <span>如果页面大小设置为100则首先调用方法<code>nextPage</code>将创建一个<code>CachedRowSet</code>前100行<i>rs</i><code>CachedRowSet</code>对象。</span> <span>在完成前100行中的数据所需的处理之后应用程序可以再次调用方法<code>nextPage</code>创建另一个<code>CachedRowSet</code>对象,其中第二行是来自<i>rs的</i></span> <span>来自第一个<code>CachedRowSet</code>对象的数据将不再在内存中,因为它被替换为第二个<code>CachedRowSet</code>对象的数据。</span> <span>在方法<code>nextPage</code>的第十个调用之后,第十个<code>CachedRowSet</code>对象将包含存储在存储器中的来自<i>rs</i>的最后100行数据。</span> <span>在任何给定时间,只有一个<code>CachedRowSet</code>对象的数据存储在内存中。</span> </p>
<p> <span>该方法<code>nextPage</code>返回<code>true</code>只要当前页不是各行的最后一页,并<code>false</code>时,有没有更多的页面。</span> <span>因此,可以在<code>while</code>循环中使用以检索所有页面,如以下代码行所示。</span> </p>
<pre> <span>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
}
}</span> </pre>
<span>运行此代码片段后应用程序将遍历所有1000行但一次内存中不得超过100行。</span>
<p> <span><code>CachedRowSet</code>界面也定义了方法<code>previousPage</code></span> <span>正如方法<code>nextPage</code>类似于<code>ResultSet</code>方法<code>next</code> ,方法<code>previousPage</code>类似于<code>ResultSet</code>方法<code>previous</code></span> <span>与方法<code>nextPage</code>类似, <code>previousPage</code>创建一个<code>CachedRowSet</code>设置为页面大小的行数的<code>CachedRowSet</code>对象。</span> <span>因此,例如,方法<code>previousPage</code>可以在前面的代码片段的末尾的<code>while</code>循环中使用,以便通过从最后一页到第一页的页面返回。</span> <span>方法<code>previousPage</code>也类似于<code>nextPage</code> ,因为它可以在<code>while</code>循环中使用,除了它返回<code>true</code> ,只要前面有另一个页面和<code>false</code>当它没有更多的页面。</span> </p>
<p> <span>通过定位光标的最后一行的每一页后,如在下面的代码段完成的,该方法<code>previous</code>从最后一行到在每一页的第一行导航。</span> <span>代码也可以将光标留在每个页面上的第一行之前,然后使用<code>while</code>循环中的方法<code>next</code>将每个页面从第一行导航到最后一行。</span> </p>
<p> <span>以下代码片段假定从上一个代码片段继续,这意味着第十个<code>CachedRowSet</code>对象的游标位于最后一行。</span> <span>代码将光标移动到最后一行之后,首先调用方法<code>previous</code>将光标放回最后一行。</span> <span>在完成最后一页( <code>CachedRowSet</code>对象<i>crs</i> )中的所有行后,代码然后进入<code>while</code>循环以进入第九页,通过行后退,转到第八页,往后排,等等到第一页的第一行。</span> </p>
<pre> <span>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
}
}</span> </pre>
</div> </li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- --> </a> <h3>Field Summary</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Field Summary table, listing fields, and an explanation">
<caption>
<span>Fields</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#COMMIT_ON_ACCEPT_CHANGES">COMMIT_ON_ACCEPT_CHANGES</a></span></code>
<div class="block">
<span><span class="deprecatedLabel">已弃用</span></span>
<div class="block">
<span><span class="deprecationComment">因为这个字段是final它是接口的一部分所以它的值不能被改变。</span></span>
</div>
</div> </td>
</tr>
</tbody>
</table>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.java.sql.ResultSet">
<!-- --> </a> <h3>Fields inherited from interface java.sql.<a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a></h3> <code><a href="../../../java/sql/ResultSet.html#CLOSE_CURSORS_AT_COMMIT">CLOSE_CURSORS_AT_COMMIT</a>, <a href="../../../java/sql/ResultSet.html#CONCUR_READ_ONLY">CONCUR_READ_ONLY</a>, <a href="../../../java/sql/ResultSet.html#CONCUR_UPDATABLE">CONCUR_UPDATABLE</a>, <a href="../../../java/sql/ResultSet.html#FETCH_FORWARD">FETCH_FORWARD</a>, <a href="../../../java/sql/ResultSet.html#FETCH_REVERSE">FETCH_REVERSE</a>, <a href="../../../java/sql/ResultSet.html#FETCH_UNKNOWN">FETCH_UNKNOWN</a>, <a href="../../../java/sql/ResultSet.html#HOLD_CURSORS_OVER_COMMIT">HOLD_CURSORS_OVER_COMMIT</a>, <a href="../../../java/sql/ResultSet.html#TYPE_FORWARD_ONLY">TYPE_FORWARD_ONLY</a>, <a href="../../../java/sql/ResultSet.html#TYPE_SCROLL_INSENSITIVE">TYPE_SCROLL_INSENSITIVE</a>, <a href="../../../java/sql/ResultSet.html#TYPE_SCROLL_SENSITIVE">TYPE_SCROLL_SENSITIVE</a></code></li>
</ul> </li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- --> </a> <h3>方法摘要</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Method Summary table, listing methods, and an explanation">
<caption>
<span class="activeTableTab" id="t0"><span>所有方法</span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t2"><span><a href="javascript:show(2);">接口方法</a></span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t3"><span><a href="javascript:show(4);">抽象方法</a></span><span class="tabEnd"> </span></span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor" id="i0">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#acceptChanges--">acceptChanges</a></span>()</code>
<div class="block">
传播行更新,插入和删除对此
<code>CachedRowSet</code>对象的更改对基础数据源。
</div> </td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#acceptChanges-java.sql.Connection-">acceptChanges</a></span>(<a href="../../../java/sql/Connection.html" title="interface in java.sql">Connection</a> con)</code>
<div class="block">
使用指定的
<code>Connection</code>对象传播所有行更新,插入和删除对此
<code>CachedRowSet</code>对象的数据源的更改,以建立与数据源的连接。
</div> </td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#columnUpdated-int-">columnUpdated</a></span>(int idx)</code>
<div class="block">
指示此
<code>CachedRowSet</code>对象的当前行中的指定列是否已更新。
</div> </td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#columnUpdated-java.lang.String-">columnUpdated</a></span>(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> columnName)</code>
<div class="block">
指示此
<code>CachedRowSet</code>对象当前行中的指定列是否已更新。
</div> </td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#commit--">commit</a></span>()</code>
<div class="block">
每个
<code>CachedRowSet</code>对象的
<code>SyncProvider</code>包含一个
<code>Connection</code>对象从
<code>ResultSet</code>或JDBC属性传递给它的构造函数。
</div> </td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code><a href="../../../javax/sql/rowset/CachedRowSet.html" title="interface in javax.sql.rowset">CachedRowSet</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#createCopy--">createCopy</a></span>()</code>
<div class="block">
创建一个
<code>RowSet</code>对象,该对象是此
<code>CachedRowSet</code>对象中的数据的深层副本。
</div> </td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code><a href="../../../javax/sql/rowset/CachedRowSet.html" title="interface in javax.sql.rowset">CachedRowSet</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#createCopyNoConstraints--">createCopyNoConstraints</a></span>()</code>
<div class="block">
创建一个
<code>CachedRowSet</code>对象,这是该
<code>CachedRowSet</code>对象的数据的深层副本,但是与之无关。
</div> </td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code><a href="../../../javax/sql/rowset/CachedRowSet.html" title="interface in javax.sql.rowset">CachedRowSet</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#createCopySchema--">createCopySchema</a></span>()</code>
<div class="block">
创建一个
<code>CachedRowSet</code>对象,该对象是此
<code>CachedRowSet</code>对象的空白副本。
</div> </td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code><a href="../../../javax/sql/RowSet.html" title="interface in javax.sql">RowSet</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#createShared--">createShared</a></span>()</code>
<div class="block">
返回一个新
<code>RowSet</code>通过相同的数据与此的支持对象
<code>CachedRowSet</code>对象。
</div> </td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#execute-java.sql.Connection-">execute</a></span>(<a href="../../../java/sql/Connection.html" title="interface in java.sql">Connection</a> conn)</code>
<div class="block">
用数据填充此
<code>CachedRowSet</code>对象,使用给定的连接生成将从中读取数据的结果集。
</div> </td>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><code>int[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#getKeyColumns--">getKeyColumns</a></span>()</code>
<div class="block">
返回一个数组,其中包含一个或多个列号,表示形成唯一标识此
<code>CachedRowSet</code>对象行的键的列。
</div> </td>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><code><a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#getOriginal--">getOriginal</a></span>()</code>
<div class="block">
返回一个
<code>ResultSet</code>
<code>CachedRowSet</code>对象的原始值的
<code>CachedRowSet</code>对象。
</div> </td>
</tr>
<tr class="altColor" id="i12">
<td class="colFirst"><code><a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#getOriginalRow--">getOriginalRow</a></span>()</code>
<div class="block">
返回一个
<code>ResultSet</code>对象,该对象只包含此
<code>CachedRowSet</code>对象的当前行的原始值。
</div> </td>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#getPageSize--">getPageSize</a></span>()</code>
<div class="block">
返回
<code>CachedRowSet</code>对象的页面大小
</div> </td>
</tr>
<tr class="altColor" id="i14">
<td class="colFirst"><code><a href="../../../javax/sql/rowset/RowSetWarning.html" title="class in javax.sql.rowset">RowSetWarning</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#getRowSetWarnings--">getRowSetWarnings</a></span>()</code>
<div class="block">
检索此
<code>RowSet</code>对象上的呼叫报告的第一个警告。
</div> </td>
</tr>
<tr class="rowColor" id="i15">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#getShowDeleted--">getShowDeleted</a></span>()</code>
<div class="block">
检索一个
<code>boolean</code>指示标记为删除的行是否显示在当前行的集合中。
</div> </td>
</tr>
<tr class="altColor" id="i16">
<td class="colFirst"><code><a href="../../../javax/sql/rowset/spi/SyncProvider.html" title="class in javax.sql.rowset.spi">SyncProvider</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#getSyncProvider--">getSyncProvider</a></span>()</code>
<div class="block">
检索
<code>SyncProvider</code>执行此
<code>CachedRowSet</code>对象。
</div> </td>
</tr>
<tr class="rowColor" id="i17">
<td class="colFirst"><code><a href="../../../java/lang/String.html" title="class in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#getTableName--">getTableName</a></span>()</code>
<div class="block">
返回用于创建此
<code>CachedRowSet</code>对象的对象(表)的
<code>CachedRowSet</code>
</div> </td>
</tr>
<tr class="altColor" id="i18">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#nextPage--">nextPage</a></span>()</code>
<div class="block">
递增的当前页
<code>CachedRowSet</code>
</div> </td>
</tr>
<tr class="rowColor" id="i19">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#populate-java.sql.ResultSet-">populate</a></span>(<a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a> data)</code>
<div class="block">
填充此
<code>CachedRowSet</code>从给定数据对象
<code>ResultSet</code>对象。
</div> </td>
</tr>
<tr class="altColor" id="i20">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#populate-java.sql.ResultSet-int-">populate</a></span>(<a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a> rs, int startRow)</code>
<div class="block">
填充此
<code>CachedRowSet</code>从给定数据对象
<code>ResultSet</code>对象。
</div> </td>
</tr>
<tr class="rowColor" id="i21">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#previousPage--">previousPage</a></span>()</code>
<div class="block">
递减的当前页
<code>CachedRowSet</code>
</div> </td>
</tr>
<tr class="altColor" id="i22">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#release--">release</a></span>()</code>
<div class="block">
释放此
<code>CachedRowSet</code>对象的当前内容,并向所有注册的监听器发送一个
<code>rowSetChanged</code>事件。
</div> </td>
</tr>
<tr class="rowColor" id="i23">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#restoreOriginal--">restoreOriginal</a></span>()</code>
<div class="block">
将此
<code>CachedRowSet</code>对象恢复为其原始值,即其最后一组更改前的值。
</div> </td>
</tr>
<tr class="altColor" id="i24">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#rollback--">rollback</a></span>()</code>
<div class="block">
每个
<code>CachedRowSet</code>对象的
<code>SyncProvider</code>包含一个
<code>Connection</code>对象,从原始的
<code>ResultSet</code>或传递给它的JDBC属性。
</div> </td>
</tr>
<tr class="rowColor" id="i25">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#rollback-java.sql.Savepoint-">rollback</a></span>(<a href="../../../java/sql/Savepoint.html" title="interface in java.sql">Savepoint</a> s)</code>
<div class="block">
每个
<code>CachedRowSet</code>对象的
<code>SyncProvider</code>包含来自原始
<code>ResultSet</code>或传递给它的JDBC属性的
<code>Connection</code>对象。
</div> </td>
</tr>
<tr class="altColor" id="i26">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#rowSetPopulated-javax.sql.RowSetEvent-int-">rowSetPopulated</a></span>(<a href="../../../javax/sql/RowSetEvent.html" title="class in javax.sql">RowSetEvent</a> event, int numRows)</code>
<div class="block">
通知已注册的侦听器给定的RowSetEvent对象中的RowSet对象已经填充了许多其他行。
</div> </td>
</tr>
<tr class="rowColor" id="i27">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#setKeyColumns-int:A-">setKeyColumns</a></span>(int[] keys)</code>
<div class="block">
使用给定的列号数组来设置此
<code>CachedRowSet</code>对象的
<code>keyCols</code>字段,该列表形成唯一标识此
<code>CachedRowSet</code>对象中的行的键。
</div> </td>
</tr>
<tr class="altColor" id="i28">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#setMetaData-javax.sql.RowSetMetaData-">setMetaData</a></span>(<a href="../../../javax/sql/RowSetMetaData.html" title="interface in javax.sql">RowSetMetaData</a> md)</code>
<div class="block">
使用给定的
<code>RowSetMetaData</code>对象设置此
<code>CachedRowSet</code>对象的元数据。
</div> </td>
</tr>
<tr class="rowColor" id="i29">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#setOriginalRow--">setOriginalRow</a></span>()</code>
<div class="block">
将此
<code>CachedRowSet</code>对象中的当前行设置为原始行。
</div> </td>
</tr>
<tr class="altColor" id="i30">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#setPageSize-int-">setPageSize</a></span>(int size)</code>
<div class="block">
设置
<code>CachedRowSet</code>对象的页面大小。
</div> </td>
</tr>
<tr class="rowColor" id="i31">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#setShowDeleted-boolean-">setShowDeleted</a></span>(boolean b)</code>
<div class="block">
将属性
<code>showDeleted</code>设置为给定的
<code>boolean</code>值,该值确定标记为删除的行是否显示在当前行的集合中。
</div> </td>
</tr>
<tr class="altColor" id="i32">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#setSyncProvider-java.lang.String-">setSyncProvider</a></span>(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> provider)</code>
<div class="block">
设置
<code>SyncProvider</code>此对象
<code>CachedRowSet</code>对象到指定的一个。
</div> </td>
</tr>
<tr class="rowColor" id="i33">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#setTableName-java.lang.String-">setTableName</a></span>(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> tabName)</code>
<div class="block">
设置此
<code>CachedRowSet</code>对象派生到给定表名称的表的标识符。
</div> </td>
</tr>
<tr class="altColor" id="i34">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#size--">size</a></span>()</code>
<div class="block">
返回此
<code>CachedRowSet</code>对象中的行数。
</div> </td>
</tr>
<tr class="rowColor" id="i35">
<td class="colFirst"><code><a href="../../../java/util/Collection.html" title="interface in java.util">Collection</a>&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#toCollection--">toCollection</a></span>()</code>
<div class="block">
这个转换
<code>CachedRowSet</code>对象为
<code>Collection</code>包含所有这些对象
<code>CachedRowSet</code>对象的数据。
</div> </td>
</tr>
<tr class="altColor" id="i36">
<td class="colFirst"><code><a href="../../../java/util/Collection.html" title="interface in java.util">Collection</a>&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#toCollection-int-">toCollection</a></span>(int column)</code>
<div class="block">
将此
<code>CachedRowSet</code>对象中的指定列转换为
<code>Collection</code>对象。
</div> </td>
</tr>
<tr class="rowColor" id="i37">
<td class="colFirst"><code><a href="../../../java/util/Collection.html" title="interface in java.util">Collection</a>&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#toCollection-java.lang.String-">toCollection</a></span>(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> column)</code>
<div class="block">
将此
<code>CachedRowSet</code>对象中的指定列转换为
<code>Collection</code>对象。
</div> </td>
</tr>
<tr class="altColor" id="i38">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#undoDelete--">undoDelete</a></span>()</code>
<div class="block">
取消删除当前行并通知侦听器行已更改。
</div> </td>
</tr>
<tr class="rowColor" id="i39">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#undoInsert--">undoInsert</a></span>()</code>
<div class="block">
如果已插入该行,则
<code>CachedRowSet</code>从当前行删除该对象,并通知侦听器行已更改。
</div> </td>
</tr>
<tr class="altColor" id="i40">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sql/rowset/CachedRowSet.html#undoUpdate--">undoUpdate</a></span>()</code>
<div class="block">
如果该行已被修改,立即反转最后一次更新操作。
</div> </td>
</tr>
</tbody>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.javax.sql.RowSet">
<!-- --> </a> <h3>Methods inherited from interface javax.sql.<a href="../../../javax/sql/RowSet.html" title="interface in javax.sql">RowSet</a></h3> <code><a href="../../../javax/sql/RowSet.html#addRowSetListener-javax.sql.RowSetListener-">addRowSetListener</a>, <a href="../../../javax/sql/RowSet.html#clearParameters--">clearParameters</a>, <a href="../../../javax/sql/RowSet.html#execute--">execute</a>, <a href="../../../javax/sql/RowSet.html#getCommand--">getCommand</a>, <a href="../../../javax/sql/RowSet.html#getDataSourceName--">getDataSourceName</a>, <a href="../../../javax/sql/RowSet.html#getEscapeProcessing--">getEscapeProcessing</a>, <a href="../../../javax/sql/RowSet.html#getMaxFieldSize--">getMaxFieldSize</a>, <a href="../../../javax/sql/RowSet.html#getMaxRows--">getMaxRows</a>, <a href="../../../javax/sql/RowSet.html#getPassword--">getPassword</a>, <a href="../../../javax/sql/RowSet.html#getQueryTimeout--">getQueryTimeout</a>, <a href="../../../javax/sql/RowSet.html#getTransactionIsolation--">getTransactionIsolation</a>, <a href="../../../javax/sql/RowSet.html#getTypeMap--">getTypeMap</a>, <a href="../../../javax/sql/RowSet.html#getUrl--">getUrl</a>, <a href="../../../javax/sql/RowSet.html#getUsername--">getUsername</a>, <a href="../../../javax/sql/RowSet.html#isReadOnly--">isReadOnly</a>, <a href="../../../javax/sql/RowSet.html#removeRowSetListener-javax.sql.RowSetListener-">removeRowSetListener</a>, <a href="../../../javax/sql/RowSet.html#setArray-int-java.sql.Array-">setArray</a>, <a href="../../../javax/sql/RowSet.html#setAsciiStream-int-java.io.InputStream-">setAsciiStream</a>, <a href="../../../javax/sql/RowSet.html#setAsciiStream-int-java.io.InputStream-int-">setAsciiStream</a>, <a href="../../../javax/sql/RowSet.html#setAsciiStream-java.lang.String-java.io.InputStream-">setAsciiStream</a>, <a href="../../../javax/sql/RowSet.html#setAsciiStream-java.lang.String-java.io.InputStream-int-">setAsciiStream</a>, <a href="../../../javax/sql/RowSet.html#setBigDecimal-int-java.math.BigDecimal-">setBigDecimal</a>, <a href="../../../javax/sql/RowSet.html#setBigDecimal-java.lang.String-java.math.BigDecimal-">setBigDecimal</a>, <a href="../../../javax/sql/RowSet.html#setBinaryStream-int-java.io.InputStream-">setBinaryStream</a>, <a href="../../../javax/sql/RowSet.html#setBinaryStream-int-java.io.InputStream-int-">setBinaryStream</a>, <a href="../../../javax/sql/RowSet.html#setBinaryStream-java.lang.String-java.io.InputStream-">setBinaryStream</a>, <a href="../../../javax/sql/RowSet.html#setBinaryStream-java.lang.String-java.io.InputStream-int-">setBinaryStream</a>, <a href="../../../javax/sql/RowSet.html#setBlob-int-java.sql.Blob-">setBlob</a>, <a href="../../../javax/sql/RowSet.html#setBlob-int-java.io.InputStream-">setBlob</a>, <a href="../../../javax/sql/RowSet.html#setBlob-int-java.io.InputStream-long-">setBlob</a>, <a href="../../../javax/sql/RowSet.html#setBlob-java.lang.String-java.sql.Blob-">setBlob</a>, <a href="../../../javax/sql/RowSet.html#setBlob-java.lang.String-java.io.InputStream-">setBlob</a>, <a href="../../../javax/sql/RowSet.html#setBlob-java.lang.String-java.io.InputStream-long-">setBlob</a>, <a href="../../../javax/sql/RowSet.html#setBoolean-int-boolean-">setBoolean</a>, <a href="../../../javax/sql/RowSet.html#setBoolean-java.lang.String-boolean-">setBoolean</a>, <a href="../../../javax/sql/RowSet.html#setByte-int-byte-">setByte</a>, <a href="../../../javax/sql/RowSet.html#setByte-java.lang.String-byte-">setByte</a>, <a href="../../../javax/sql/RowSet.html#setBytes-int-byte:A-">setBytes</a>, <a href="../../../javax/sql/RowSet.html#setBytes-java.lang.String-byte:A-">setBytes</a>, <a href="../../../javax/sql/RowSet.html#setCharacterStream-int-java.io.Reader-">setCharacterStream</a>, <a href="../../../javax/sql/RowSet.html#setCharacterStream-int-java.io.Reader-int-">setCharacterStream</a>, <a href="../../../javax/sql/RowSet.html#setCharacterStream-java.lang.String-java.io.Reader-">setCharacterStream</a>, <a href="../../../javax/sql/RowSet.html#setCharacterStream-java.lang.String-java.io.Reader-int-">setCharacterStream</a>, <a href="../../../javax/sql/RowSet.html#setClob-int-java.sql.Clob-">setClob</a>, <a href="../../../javax/sql/RowSet.html#setClob-int-java.io.Reader-">setClob</a>, <a href="../../../javax/sql/RowSet.html#setClob-int-java.io.Reader-long-">setClob</a>, <a href="../../../javax/sql/RowSet.html#setClob-java.lang.String-java.sql.Clob-">setClob</a>, <a href="../../../javax/sql/RowSet.html#setClob-java.lang.String-java.io.Reader-">setClob</a>, <a href="../../../javax/sql/RowSet.html#setClob-java.lang.String-java.io.Reader-long-">setClob</a>, <a href="../../../javax/sql/RowSet.html#setCommand-java.lang.String-">setCommand</a>, <a href="../../../javax/sql/RowSet.html#setConcurrency-int-">setConcurrency</a>, <a href="../../../javax/sql/RowSet.html#setDataSourceName-java.lang.String-">setDataSourceName</a>, <a href="../../../javax/sql/RowSet.html#setDate-int-java.sql.Date-">setDate</a>, <a href="../../../javax/sql/RowSet.html#setDate-int-java.sql.Date-java.util.Calendar-">setDate</a>, <a href="../../../javax/sql/RowSet.html#setDate-java.lang.String-java.sql.Date-">setDate</a>, <a href="../../../javax/sql/RowSet.html#setDate-java.lang.String-java.sql.Date-java.util.Calendar-">setDate</a>, <a href="../../../javax/sql/RowSet.html#setDouble-int-double-">setDouble</a>, <a href="../../../javax/sql/RowSet.html#setDouble-java.lang.String-double-">setDouble</a>, <a href="../../../javax/sql/RowSet.html#setEscapeProcessing-boolean-">setEscapeProcessing</a>, <a href="../../../javax/sql/RowSet.html#setFloat-int-float-">setFloat</a>, <a href="../../../javax/sql/RowSet.html#setFloat-java.lang.String-float-">setFloat</a>, <a href="../../../javax/sql/RowSet.html#setInt-int-int-">setInt</a>, <a href="../../../javax/sql/RowSet.html#setInt-java.lang.String-int-">setInt</a>, <a href="../../../javax/sql/RowSet.html#setLong-int-long-">setLong</a>, <a href="../../../javax/sql/RowSet.html#setLong-java.lang.String-long-">setLong</a>, <a href="../../../javax/sql/RowSet.html#setMaxFieldSize-int-">setMaxFieldSize</a>, <a href="../../../javax/sql/RowSet.html#setMaxRows-int-">setMaxRows</a>, <a href="../../../javax/sql/RowSet.html#setNCharacterStream-int-java.io.Reader-">setNCharacterStream</a>, <a href="../../../javax/sql/RowSet.html#setNCharacterStream-int-java.io.Reader-long-">setNCharacterStream</a>, <a href="../../../javax/sql/RowSet.html#setNCharacterStream-java.lang.String-java.io.Reader-">setNCharacterStream</a>, <a href="../../../javax/sql/RowSet.html#setNCharacterStream-java.lang.String-java.io.Reader-long-">setNCharacterStream</a>, <a href="../../../javax/sql/RowSet.html#setNClob-int-java.sql.NClob-">setNClob</a>, <a href="../../../javax/sql/RowSet.html#setNClob-int-java.io.Reader-">setNClob</a>, <a href="../../../javax/sql/RowSet.html#setNClob-int-java.io.Reader-long-">setNClob</a>, <a href="../../../javax/sql/RowSet.html#setNClob-java.lang.String-java.sql.NClob-">setNClob</a>, <a href="../../../javax/sql/RowSet.html#setNClob-java.lang.String-java.io.Reader-">setNClob</a>, <a href="../../../javax/sql/RowSet.html#setNClob-java.lang.String-java.io.Reader-long-">setNClob</a>, <a href="../../../javax/sql/RowSet.html#setNString-int-java.lang.String-">setNString</a>, <a href="../../../javax/sql/RowSet.html#setNString-java.lang.String-java.lang.String-">setNString</a>, <a href="../../../javax/sql/RowSet.html#setNull-int-int-">setNull</a>, <a href="../../../javax/sql/RowSet.html#setNull-int-int-java.lang.String-">setNull</a>, <a href="../../../javax/sql/RowSet.html#setNull-java.lang.String-int-">setNull</a>, <a href="../../../javax/sql/RowSet.html#setNull-java.lang.String-int-java.lang.String-">setNull</a>, <a href="../../../javax/sql/RowSet.html#setObject-int-java.lang.Object-">setObject</a>, <a href="../../../javax/sql/RowSet.html#setObject-int-java.lang.Object-int-">setObject</a>, <a href="../../../javax/sql/RowSet.html#setObject-int-java.lang.Object-int-int-">setObject</a>, <a href="../../../javax/sql/RowSet.html#setObject-java.lang.String-java.lang.Object-">setObject</a>, <a href="../../../javax/sql/RowSet.html#setObject-java.lang.String-java.lang.Object-int-">setObject</a>, <a href="../../../javax/sql/RowSet.html#setObject-java.lang.String-java.lang.Object-int-int-">setObject</a>, <a href="../../../javax/sql/RowSet.html#setPassword-java.lang.String-">setPassword</a>, <a href="../../../javax/sql/RowSet.html#setQueryTimeout-int-">setQueryTimeout</a>, <a href="../../../javax/sql/RowSet.html#setReadOnly-boolean-">setReadOnly</a>, <a href="../../../javax/sql/RowSet.html#setRef-int-java.sql.Ref-">setRef</a>, <a href="../../../javax/sql/RowSet.html#setRowId-int-java.sql.RowId-">setRowId</a>, <a href="../../../javax/sql/RowSet.html#setRowId-java.lang.String-java.sql.RowId-">setRowId</a>, <a href="../../../javax/sql/RowSet.html#setShort-int-short-">setShort</a>, <a href="../../../javax/sql/RowSet.html#setShort-java.lang.String-short-">setShort</a>, <a href="../../../javax/sql/RowSet.html#setSQLXML-int-java.sql.SQLXML-">setSQLXML</a>, <a href="../../../javax/sql/RowSet.html#setSQLXML-java.lang.String-java.sql.SQLXML-">setSQLXML</a>, <a href="../../../javax/sql/RowSet.html#setString-int-java.lang.String-">setString</a>, <a href="../../../javax/sql/RowSet.html#setString-java.lang.String-java.lang.String-">setString</a>, <a href="../../../javax/sql/RowSet.html#setTime-int-java.sql.Time-">setTime</a>, <a href="../../../javax/sql/RowSet.html#setTime-int-java.sql.Time-java.util.Calendar-">setTime</a>, <a href="../../../javax/sql/RowSet.html#setTime-java.lang.String-java.sql.Time-">setTime</a>, <a href="../../../javax/sql/RowSet.html#setTime-java.lang.String-java.sql.Time-java.util.Calendar-">setTime</a>, <a href="../../../javax/sql/RowSet.html#setTimestamp-int-java.sql.Timestamp-">setTimestamp</a>, <a href="../../../javax/sql/RowSet.html#setTimestamp-int-java.sql.Timestamp-java.util.Calendar-">setTimestamp</a>, <a href="../../../javax/sql/RowSet.html#setTimestamp-java.lang.String-java.sql.Timestamp-">setTimestamp</a>, <a href="../../../javax/sql/RowSet.html#setTimestamp-java.lang.String-java.sql.Timestamp-java.util.Calendar-">setTimestamp</a>, <a href="../../../javax/sql/RowSet.html#setTransactionIsolation-int-">setTransactionIsolation</a>, <a href="../../../javax/sql/RowSet.html#setType-int-">setType</a>, <a href="../../../javax/sql/RowSet.html#setTypeMap-java.util.Map-">setTypeMap</a>, <a href="../../../javax/sql/RowSet.html#setURL-int-java.net.URL-">setURL</a>, <a href="../../../javax/sql/RowSet.html#setUrl-java.lang.String-">setUrl</a>, <a href="../../../javax/sql/RowSet.html#setUsername-java.lang.String-">setUsername</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.sql.ResultSet">
<!-- --> </a> <h3>Methods inherited from interface java.sql.<a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a></h3> <code><a href="../../../java/sql/ResultSet.html#absolute-int-">absolute</a>, <a href="../../../java/sql/ResultSet.html#afterLast--">afterLast</a>, <a href="../../../java/sql/ResultSet.html#beforeFirst--">beforeFirst</a>, <a href="../../../java/sql/ResultSet.html#cancelRowUpdates--">cancelRowUpdates</a>, <a href="../../../java/sql/ResultSet.html#clearWarnings--">clearWarnings</a>, <a href="../../../java/sql/ResultSet.html#close--">close</a>, <a href="../../../java/sql/ResultSet.html#deleteRow--">deleteRow</a>, <a href="../../../java/sql/ResultSet.html#findColumn-java.lang.String-">findColumn</a>, <a href="../../../java/sql/ResultSet.html#first--">first</a>, <a href="../../../java/sql/ResultSet.html#getArray-int-">getArray</a>, <a href="../../../java/sql/ResultSet.html#getArray-java.lang.String-">getArray</a>, <a href="../../../java/sql/ResultSet.html#getAsciiStream-int-">getAsciiStream</a>, <a href="../../../java/sql/ResultSet.html#getAsciiStream-java.lang.String-">getAsciiStream</a>, <a href="../../../java/sql/ResultSet.html#getBigDecimal-int-">getBigDecimal</a>, <a href="../../../java/sql/ResultSet.html#getBigDecimal-int-int-">getBigDecimal</a>, <a href="../../../java/sql/ResultSet.html#getBigDecimal-java.lang.String-">getBigDecimal</a>, <a href="../../../java/sql/ResultSet.html#getBigDecimal-java.lang.String-int-">getBigDecimal</a>, <a href="../../../java/sql/ResultSet.html#getBinaryStream-int-">getBinaryStream</a>, <a href="../../../java/sql/ResultSet.html#getBinaryStream-java.lang.String-">getBinaryStream</a>, <a href="../../../java/sql/ResultSet.html#getBlob-int-">getBlob</a>, <a href="../../../java/sql/ResultSet.html#getBlob-java.lang.String-">getBlob</a>, <a href="../../../java/sql/ResultSet.html#getBoolean-int-">getBoolean</a>, <a href="../../../java/sql/ResultSet.html#getBoolean-java.lang.String-">getBoolean</a>, <a href="../../../java/sql/ResultSet.html#getByte-int-">getByte</a>, <a href="../../../java/sql/ResultSet.html#getByte-java.lang.String-">getByte</a>, <a href="../../../java/sql/ResultSet.html#getBytes-int-">getBytes</a>, <a href="../../../java/sql/ResultSet.html#getBytes-java.lang.String-">getBytes</a>, <a href="../../../java/sql/ResultSet.html#getCharacterStream-int-">getCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#getCharacterStream-java.lang.String-">getCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#getClob-int-">getClob</a>, <a href="../../../java/sql/ResultSet.html#getClob-java.lang.String-">getClob</a>, <a href="../../../java/sql/ResultSet.html#getConcurrency--">getConcurrency</a>, <a href="../../../java/sql/ResultSet.html#getCursorName--">getCursorName</a>, <a href="../../../java/sql/ResultSet.html#getDate-int-">getDate</a>, <a href="../../../java/sql/ResultSet.html#getDate-int-java.util.Calendar-">getDate</a>, <a href="../../../java/sql/ResultSet.html#getDate-java.lang.String-">getDate</a>, <a href="../../../java/sql/ResultSet.html#getDate-java.lang.String-java.util.Calendar-">getDate</a>, <a href="../../../java/sql/ResultSet.html#getDouble-int-">getDouble</a>, <a href="../../../java/sql/ResultSet.html#getDouble-java.lang.String-">getDouble</a>, <a href="../../../java/sql/ResultSet.html#getFetchDirection--">getFetchDirection</a>, <a href="../../../java/sql/ResultSet.html#getFetchSize--">getFetchSize</a>, <a href="../../../java/sql/ResultSet.html#getFloat-int-">getFloat</a>, <a href="../../../java/sql/ResultSet.html#getFloat-java.lang.String-">getFloat</a>, <a href="../../../java/sql/ResultSet.html#getHoldability--">getHoldability</a>, <a href="../../../java/sql/ResultSet.html#getInt-int-">getInt</a>, <a href="../../../java/sql/ResultSet.html#getInt-java.lang.String-">getInt</a>, <a href="../../../java/sql/ResultSet.html#getLong-int-">getLong</a>, <a href="../../../java/sql/ResultSet.html#getLong-java.lang.String-">getLong</a>, <a href="../../../java/sql/ResultSet.html#getMetaData--">getMetaData</a>, <a href="../../../java/sql/ResultSet.html#getNCharacterStream-int-">getNCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#getNCharacterStream-java.lang.String-">getNCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#getNClob-int-">getNClob</a>, <a href="../../../java/sql/ResultSet.html#getNClob-java.lang.String-">getNClob</a>, <a href="../../../java/sql/ResultSet.html#getNString-int-">getNString</a>, <a href="../../../java/sql/ResultSet.html#getNString-java.lang.String-">getNString</a>, <a href="../../../java/sql/ResultSet.html#getObject-int-">getObject</a>, <a href="../../../java/sql/ResultSet.html#getObject-int-java.lang.Class-">getObject</a>, <a href="../../../java/sql/ResultSet.html#getObject-int-java.util.Map-">getObject</a>, <a href="../../../java/sql/ResultSet.html#getObject-java.lang.String-">getObject</a>, <a href="../../../java/sql/ResultSet.html#getObject-java.lang.String-java.lang.Class-">getObject</a>, <a href="../../../java/sql/ResultSet.html#getObject-java.lang.String-java.util.Map-">getObject</a>, <a href="../../../java/sql/ResultSet.html#getRef-int-">getRef</a>, <a href="../../../java/sql/ResultSet.html#getRef-java.lang.String-">getRef</a>, <a href="../../../java/sql/ResultSet.html#getRow--">getRow</a>, <a href="../../../java/sql/ResultSet.html#getRowId-int-">getRowId</a>, <a href="../../../java/sql/ResultSet.html#getRowId-java.lang.String-">getRowId</a>, <a href="../../../java/sql/ResultSet.html#getShort-int-">getShort</a>, <a href="../../../java/sql/ResultSet.html#getShort-java.lang.String-">getShort</a>, <a href="../../../java/sql/ResultSet.html#getSQLXML-int-">getSQLXML</a>, <a href="../../../java/sql/ResultSet.html#getSQLXML-java.lang.String-">getSQLXML</a>, <a href="../../../java/sql/ResultSet.html#getStatement--">getStatement</a>, <a href="../../../java/sql/ResultSet.html#getString-int-">getString</a>, <a href="../../../java/sql/ResultSet.html#getString-java.lang.String-">getString</a>, <a href="../../../java/sql/ResultSet.html#getTime-int-">getTime</a>, <a href="../../../java/sql/ResultSet.html#getTime-int-java.util.Calendar-">getTime</a>, <a href="../../../java/sql/ResultSet.html#getTime-java.lang.String-">getTime</a>, <a href="../../../java/sql/ResultSet.html#getTime-java.lang.String-java.util.Calendar-">getTime</a>, <a href="../../../java/sql/ResultSet.html#getTimestamp-int-">getTimestamp</a>, <a href="../../../java/sql/ResultSet.html#getTimestamp-int-java.util.Calendar-">getTimestamp</a>, <a href="../../../java/sql/ResultSet.html#getTimestamp-java.lang.String-">getTimestamp</a>, <a href="../../../java/sql/ResultSet.html#getTimestamp-java.lang.String-java.util.Calendar-">getTimestamp</a>, <a href="../../../java/sql/ResultSet.html#getType--">getType</a>, <a href="../../../java/sql/ResultSet.html#getUnicodeStream-int-">getUnicodeStream</a>, <a href="../../../java/sql/ResultSet.html#getUnicodeStream-java.lang.String-">getUnicodeStream</a>, <a href="../../../java/sql/ResultSet.html#getURL-int-">getURL</a>, <a href="../../../java/sql/ResultSet.html#getURL-java.lang.String-">getURL</a>, <a href="../../../java/sql/ResultSet.html#getWarnings--">getWarnings</a>, <a href="../../../java/sql/ResultSet.html#insertRow--">insertRow</a>, <a href="../../../java/sql/ResultSet.html#isAfterLast--">isAfterLast</a>, <a href="../../../java/sql/ResultSet.html#isBeforeFirst--">isBeforeFirst</a>, <a href="../../../java/sql/ResultSet.html#isClosed--">isClosed</a>, <a href="../../../java/sql/ResultSet.html#isFirst--">isFirst</a>, <a href="../../../java/sql/ResultSet.html#isLast--">isLast</a>, <a href="../../../java/sql/ResultSet.html#last--">last</a>, <a href="../../../java/sql/ResultSet.html#moveToCurrentRow--">moveToCurrentRow</a>, <a href="../../../java/sql/ResultSet.html#moveToInsertRow--">moveToInsertRow</a>, <a href="../../../java/sql/ResultSet.html#next--">next</a>, <a href="../../../java/sql/ResultSet.html#previous--">previous</a>, <a href="../../../java/sql/ResultSet.html#refreshRow--">refreshRow</a>, <a href="../../../java/sql/ResultSet.html#relative-int-">relative</a>, <a href="../../../java/sql/ResultSet.html#rowDeleted--">rowDeleted</a>, <a href="../../../java/sql/ResultSet.html#rowInserted--">rowInserted</a>, <a href="../../../java/sql/ResultSet.html#rowUpdated--">rowUpdated</a>, <a href="../../../java/sql/ResultSet.html#setFetchDirection-int-">setFetchDirection</a>, <a href="../../../java/sql/ResultSet.html#setFetchSize-int-">setFetchSize</a>, <a href="../../../java/sql/ResultSet.html#updateArray-int-java.sql.Array-">updateArray</a>, <a href="../../../java/sql/ResultSet.html#updateArray-java.lang.String-java.sql.Array-">updateArray</a>, <a href="../../../java/sql/ResultSet.html#updateAsciiStream-int-java.io.InputStream-">updateAsciiStream</a>, <a href="../../../java/sql/ResultSet.html#updateAsciiStream-int-java.io.InputStream-int-">updateAsciiStream</a>, <a href="../../../java/sql/ResultSet.html#updateAsciiStream-int-java.io.InputStream-long-">updateAsciiStream</a>, <a href="../../../java/sql/ResultSet.html#updateAsciiStream-java.lang.String-java.io.InputStream-">updateAsciiStream</a>, <a href="../../../java/sql/ResultSet.html#updateAsciiStream-java.lang.String-java.io.InputStream-int-">updateAsciiStream</a>, <a href="../../../java/sql/ResultSet.html#updateAsciiStream-java.lang.String-java.io.InputStream-long-">updateAsciiStream</a>, <a href="../../../java/sql/ResultSet.html#updateBigDecimal-int-java.math.BigDecimal-">updateBigDecimal</a>, <a href="../../../java/sql/ResultSet.html#updateBigDecimal-java.lang.String-java.math.BigDecimal-">updateBigDecimal</a>, <a href="../../../java/sql/ResultSet.html#updateBinaryStream-int-java.io.InputStream-">updateBinaryStream</a>, <a href="../../../java/sql/ResultSet.html#updateBinaryStream-int-java.io.InputStream-int-">updateBinaryStream</a>, <a href="../../../java/sql/ResultSet.html#updateBinaryStream-int-java.io.InputStream-long-">updateBinaryStream</a>, <a href="../../../java/sql/ResultSet.html#updateBinaryStream-java.lang.String-java.io.InputStream-">updateBinaryStream</a>, <a href="../../../java/sql/ResultSet.html#updateBinaryStream-java.lang.String-java.io.InputStream-int-">updateBinaryStream</a>, <a href="../../../java/sql/ResultSet.html#updateBinaryStream-java.lang.String-java.io.InputStream-long-">updateBinaryStream</a>, <a href="../../../java/sql/ResultSet.html#updateBlob-int-java.sql.Blob-">updateBlob</a>, <a href="../../../java/sql/ResultSet.html#updateBlob-int-java.io.InputStream-">updateBlob</a>, <a href="../../../java/sql/ResultSet.html#updateBlob-int-java.io.InputStream-long-">updateBlob</a>, <a href="../../../java/sql/ResultSet.html#updateBlob-java.lang.String-java.sql.Blob-">updateBlob</a>, <a href="../../../java/sql/ResultSet.html#updateBlob-java.lang.String-java.io.InputStream-">updateBlob</a>, <a href="../../../java/sql/ResultSet.html#updateBlob-java.lang.String-java.io.InputStream-long-">updateBlob</a>, <a href="../../../java/sql/ResultSet.html#updateBoolean-int-boolean-">updateBoolean</a>, <a href="../../../java/sql/ResultSet.html#updateBoolean-java.lang.String-boolean-">updateBoolean</a>, <a href="../../../java/sql/ResultSet.html#updateByte-int-byte-">updateByte</a>, <a href="../../../java/sql/ResultSet.html#updateByte-java.lang.String-byte-">updateByte</a>, <a href="../../../java/sql/ResultSet.html#updateBytes-int-byte:A-">updateBytes</a>, <a href="../../../java/sql/ResultSet.html#updateBytes-java.lang.String-byte:A-">updateBytes</a>, <a href="../../../java/sql/ResultSet.html#updateCharacterStream-int-java.io.Reader-">updateCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateCharacterStream-int-java.io.Reader-int-">updateCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateCharacterStream-int-java.io.Reader-long-">updateCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateCharacterStream-java.lang.String-java.io.Reader-">updateCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateCharacterStream-java.lang.String-java.io.Reader-int-">updateCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateCharacterStream-java.lang.String-java.io.Reader-long-">updateCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateClob-int-java.sql.Clob-">updateClob</a>, <a href="../../../java/sql/ResultSet.html#updateClob-int-java.io.Reader-">updateClob</a>, <a href="../../../java/sql/ResultSet.html#updateClob-int-java.io.Reader-long-">updateClob</a>, <a href="../../../java/sql/ResultSet.html#updateClob-java.lang.String-java.sql.Clob-">updateClob</a>, <a href="../../../java/sql/ResultSet.html#updateClob-java.lang.String-java.io.Reader-">updateClob</a>, <a href="../../../java/sql/ResultSet.html#updateClob-java.lang.String-java.io.Reader-long-">updateClob</a>, <a href="../../../java/sql/ResultSet.html#updateDate-int-java.sql.Date-">updateDate</a>, <a href="../../../java/sql/ResultSet.html#updateDate-java.lang.String-java.sql.Date-">updateDate</a>, <a href="../../../java/sql/ResultSet.html#updateDouble-int-double-">updateDouble</a>, <a href="../../../java/sql/ResultSet.html#updateDouble-java.lang.String-double-">updateDouble</a>, <a href="../../../java/sql/ResultSet.html#updateFloat-int-float-">updateFloat</a>, <a href="../../../java/sql/ResultSet.html#updateFloat-java.lang.String-float-">updateFloat</a>, <a href="../../../java/sql/ResultSet.html#updateInt-int-int-">updateInt</a>, <a href="../../../java/sql/ResultSet.html#updateInt-java.lang.String-int-">updateInt</a>, <a href="../../../java/sql/ResultSet.html#updateLong-int-long-">updateLong</a>, <a href="../../../java/sql/ResultSet.html#updateLong-java.lang.String-long-">updateLong</a>, <a href="../../../java/sql/ResultSet.html#updateNCharacterStream-int-java.io.Reader-">updateNCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateNCharacterStream-int-java.io.Reader-long-">updateNCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateNCharacterStream-java.lang.String-java.io.Reader-">updateNCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateNCharacterStream-java.lang.String-java.io.Reader-long-">updateNCharacterStream</a>, <a href="../../../java/sql/ResultSet.html#updateNClob-int-java.sql.NClob-">updateNClob</a>, <a href="../../../java/sql/ResultSet.html#updateNClob-int-java.io.Reader-">updateNClob</a>, <a href="../../../java/sql/ResultSet.html#updateNClob-int-java.io.Reader-long-">updateNClob</a>, <a href="../../../java/sql/ResultSet.html#updateNClob-java.lang.String-java.sql.NClob-">updateNClob</a>, <a href="../../../java/sql/ResultSet.html#updateNClob-java.lang.String-java.io.Reader-">updateNClob</a>, <a href="../../../java/sql/ResultSet.html#updateNClob-java.lang.String-java.io.Reader-long-">updateNClob</a>, <a href="../../../java/sql/ResultSet.html#updateNString-int-java.lang.String-">updateNString</a>, <a href="../../../java/sql/ResultSet.html#updateNString-java.lang.String-java.lang.String-">updateNString</a>, <a href="../../../java/sql/ResultSet.html#updateNull-int-">updateNull</a>, <a href="../../../java/sql/ResultSet.html#updateNull-java.lang.String-">updateNull</a>, <a href="../../../java/sql/ResultSet.html#updateObject-int-java.lang.Object-">updateObject</a>, <a href="../../../java/sql/ResultSet.html#updateObject-int-java.lang.Object-int-">updateObject</a>, <a href="../../../java/sql/ResultSet.html#updateObject-int-java.lang.Object-java.sql.SQLType-">updateObject</a>, <a href="../../../java/sql/ResultSet.html#updateObject-int-java.lang.Object-java.sql.SQLType-int-">updateObject</a>, <a href="../../../java/sql/ResultSet.html#updateObject-java.lang.String-java.lang.Object-">updateObject</a>, <a href="../../../java/sql/ResultSet.html#updateObject-java.lang.String-java.lang.Object-int-">updateObject</a>, <a href="../../../java/sql/ResultSet.html#updateObject-java.lang.String-java.lang.Object-java.sql.SQLType-">updateObject</a>, <a href="../../../java/sql/ResultSet.html#updateObject-java.lang.String-java.lang.Object-java.sql.SQLType-int-">updateObject</a>, <a href="../../../java/sql/ResultSet.html#updateRef-int-java.sql.Ref-">updateRef</a>, <a href="../../../java/sql/ResultSet.html#updateRef-java.lang.String-java.sql.Ref-">updateRef</a>, <a href="../../../java/sql/ResultSet.html#updateRow--">updateRow</a>, <a href="../../../java/sql/ResultSet.html#updateRowId-int-java.sql.RowId-">updateRowId</a>, <a href="../../../java/sql/ResultSet.html#updateRowId-java.lang.String-java.sql.RowId-">updateRowId</a>, <a href="../../../java/sql/ResultSet.html#updateShort-int-short-">updateShort</a>, <a href="../../../java/sql/ResultSet.html#updateShort-java.lang.String-short-">updateShort</a>, <a href="../../../java/sql/ResultSet.html#updateSQLXML-int-java.sql.SQLXML-">updateSQLXML</a>, <a href="../../../java/sql/ResultSet.html#updateSQLXML-java.lang.String-java.sql.SQLXML-">updateSQLXML</a>, <a href="../../../java/sql/ResultSet.html#updateString-int-java.lang.String-">updateString</a>, <a href="../../../java/sql/ResultSet.html#updateString-java.lang.String-java.lang.String-">updateString</a>, <a href="../../../java/sql/ResultSet.html#updateTime-int-java.sql.Time-">updateTime</a>, <a href="../../../java/sql/ResultSet.html#updateTime-java.lang.String-java.sql.Time-">updateTime</a>, <a href="../../../java/sql/ResultSet.html#updateTimestamp-int-java.sql.Timestamp-">updateTimestamp</a>, <a href="../../../java/sql/ResultSet.html#updateTimestamp-java.lang.String-java.sql.Timestamp-">updateTimestamp</a>, <a href="../../../java/sql/ResultSet.html#wasNull--">wasNull</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.sql.Wrapper">
<!-- --> </a> <h3>Methods inherited from interface java.sql.<a href="../../../java/sql/Wrapper.html" title="interface in java.sql">Wrapper</a></h3> <code><a href="../../../java/sql/Wrapper.html#isWrapperFor-java.lang.Class-">isWrapperFor</a>, <a href="../../../java/sql/Wrapper.html#unwrap-java.lang.Class-">unwrap</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.javax.sql.rowset.Joinable">
<!-- --> </a> <h3>Methods inherited from interface javax.sql.rowset.<a href="../../../javax/sql/rowset/Joinable.html" title="interface in javax.sql.rowset">Joinable</a></h3> <code><a href="../../../javax/sql/rowset/Joinable.html#getMatchColumnIndexes--">getMatchColumnIndexes</a>, <a href="../../../javax/sql/rowset/Joinable.html#getMatchColumnNames--">getMatchColumnNames</a>, <a href="../../../javax/sql/rowset/Joinable.html#setMatchColumn-int-">setMatchColumn</a>, <a href="../../../javax/sql/rowset/Joinable.html#setMatchColumn-int:A-">setMatchColumn</a>, <a href="../../../javax/sql/rowset/Joinable.html#setMatchColumn-java.lang.String-">setMatchColumn</a>, <a href="../../../javax/sql/rowset/Joinable.html#setMatchColumn-java.lang.String:A-">setMatchColumn</a>, <a href="../../../javax/sql/rowset/Joinable.html#unsetMatchColumn-int-">unsetMatchColumn</a>, <a href="../../../javax/sql/rowset/Joinable.html#unsetMatchColumn-int:A-">unsetMatchColumn</a>, <a href="../../../javax/sql/rowset/Joinable.html#unsetMatchColumn-java.lang.String-">unsetMatchColumn</a>, <a href="../../../javax/sql/rowset/Joinable.html#unsetMatchColumn-java.lang.String:A-">unsetMatchColumn</a></code></li>
</ul> </li>
</ul> </li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- --> </a> <h3>字段详细信息</h3> <a name="COMMIT_ON_ACCEPT_CHANGES">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>COMMIT_ON_ACCEPT_CHANGES</h4> <pre><a href="../../../java/lang/Deprecated.html" title="annotation in java.lang">@Deprecated</a>
static final boolean COMMIT_ON_ACCEPT_CHANGES</pre>
<div class="block">
<span><span class="deprecatedLabel">已弃用</span></span>
<span><span class="deprecationComment">因为这个字段是final它是接口的一部分所以它的值不能被改变。</span></span>
</div>
<div class="block">
<span><code>acceptChanges()</code>时,导致<code>CachedRowSet</code>对象的<code>SyncProvider</code>提交更改。</span>
<span>如果设置为false直到的一个变化将<b>不会</b>提交<code>CachedRowSet</code>接口交易方法被调用。</span>
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#commit--"><code>commit()</code></a>
<a href="../../../javax/sql/rowset/CachedRowSet.html#rollback--"><code>rollback()</code></a>
<a href="../../../constant-values.html#javax.sql.rowset.CachedRowSet.COMMIT_ON_ACCEPT_CHANGES">Constant Field Values</a>
</dd>
</dl> </li>
</ul> </li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- --> </a> <h3>方法详细信息</h3> <a name="populate-java.sql.ResultSet-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>populate</h4> <pre>void populate(<a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a> data)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>填充此<code>CachedRowSet</code>从给定数据对象<code>ResultSet</code>对象。</span>
<p> <span>当应用程序连接到打开的<code>ResultSet</code>对象时,此方法可用作<code>execute</code>方法的<code>execute</code>方法。</span> <span>使用方法<code>populate</code>可以比使用不采用参数的版本的<code>execute</code>有效,因为它不会打开新连接并重新执行此<code>CachedRowSet</code>对象的命令。</span> <span>与使用<code>ResultSet</code>对象的<code>execute</code>版本相比,使用<code>populate</code>方法更<code>ResultSet</code></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>data</code> -所述
<code>ResultSet</code>包含数据对象读入此
<code>CachedRowSet</code>对象
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果提供了一个null的
<code>ResultSet</code>对象,或者该
<code>CachedRowSet</code>对象无法检索到关联的
<code>ResultSetMetaData</code>对象
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/CachedRowSet.html#execute-java.sql.Connection-"><code>execute(java.sql.Connection)</code></a> <a href="../../../java/sql/ResultSet.html" title="java.sql中的接口"><code>ResultSet</code></a> <a href="../../../java/sql/ResultSetMetaData.html" title="java.sql中的接口"><code>ResultSetMetaData</code></a></span>
</dd>
</dl> </li>
</ul> <a name="execute-java.sql.Connection-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>execute</h4> <pre>void execute(<a href="../../../java/sql/Connection.html" title="interface in java.sql">Connection</a> conn)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>用数据填充此<code>CachedRowSet</code>对象,使用给定的连接生成将从中读取数据的结果集。</span>
<span>此方法应关闭其创建的任何数据库连接,以确保此<code>CachedRowSet</code>对象被断开,除非它从其数据源读取数据或将数据写入其数据源。</span>
<p> <span><code>CachedRowSet</code>对象的读者将使用<i>conn</i>建立与数据源的连接,以便它可以执行行集的命令,并从生成的<code>ResultSet</code>对象中读取数据到此<code>CachedRowSet</code>对象。</span> <span>此方法也会在填充此<code>CachedRowSet</code>对象后关闭<i>conn</i></span> </p>
<p> <span>如果在已经填充实现的情况下调用此方法,则(重新)设置内容和元数据。</span> <span>此外,如果在方法<code>acceptChanges</code>被调用以提交未完成的更新之前调用此方法,则这些更新将丢失。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>conn</code> - 具有有效属性的标准JDBC
<code>Connection</code>对象
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果提供了无效的
<code>Connection</code>对象或建立与数据源的连接时发生错误
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/CachedRowSet.html#populate-java.sql.ResultSet-"><code>populate(java.sql.ResultSet)</code></a> <a href="../../../java/sql/Connection.html" title="java.sql中的接口"><code>Connection</code></a></span>
</dd>
</dl> </li>
</ul> <a name="acceptChanges--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>acceptChanges</h4> <pre>void acceptChanges()
throws <a href="../../../javax/sql/rowset/spi/SyncProviderException.html" title="class in javax.sql.rowset.spi">SyncProviderException</a></pre>
<div class="block">
<span>传播行更新,插入和删除对此<code>CachedRowSet</code>对象的更改对基础数据源。</span>
<p> <span>这个方法要求这个<code>CachedRowSet</code>对象的作者在幕后进行工作。</span> <span>标准<code>CachedRowSet</code>实现应该使用<code>SyncFactory</code>例来获取提供<code>RowSetWriter</code>对象writer<code>SyncProvider</code>实例。</span> <span>作者将尝试将此<code>CachedRowSet</code>对象中的更改<code>CachedRowSet</code>回数据源。</span> </p>
<p> <span>当方法<code>acceptChanges</code>执行时,除了对数据源进行更改之外,还会使当前行中的值为原始行中的值。</span> </p>
<p> <span>根据正在使用的<code>SyncProvider</code>实现的同步级别,作者会将原始值与数据源中的值进行比较,以检查冲突。</span> <span>当有冲突时, <code>RIOptimisticProvider</code>实现,例如,抛出一个<code>SyncProviderException</code> ,并且不写任何数据源。</span> </p>
<p> <span>应用程序可能会选择捕获<code>SyncProviderException</code>对象并检索其包含的<code>SyncResolver</code>对象。</span> <span><code>SyncResolver</code>对象<code>SyncResolver</code>列出冲突,并在数据源上设置锁定,以避免在当前冲突解决时发生冲突。</span> <span>此外,对于每个冲突,它提供了检查冲突并设置应该在数据源中持久存在的值的方法。</span> <span>所有冲突解决后,应用程序必须再次调用<code>acceptChanges</code>方法将解析的值写入数据源。</span> <span>如果数据源中的所有值都已经是要保留的值,则方法<code>acceptChanges</code>不执行任何操作。</span> </p>
<p> <span>一些提供商的实现可以使用锁来确保没有冲突。</span> <span>在这种情况下,保证当调用方法<code>acceptChanges</code>时,作者将成功写入数据源的更改。</span> <span>这种方法可以立即方法后调用<code>updateRow</code> <code>insertRow</code> ,或<code>deleteRow</code>已经调用,但它是更有效的已作出的所有修改完成后,只有一个连接需要建立只有一次调用它。</span> </p>
<p> <span>注意: <code>acceptChanges()</code>方法将确定<code>COMMIT_ON_ACCEPT_CHANGES</code>是否设置为true。</span> <span>如果设置为true则同步中的所有更新都将提交到数据源。</span> <span>否则,应用程序<b>必须</b>明确地调用<code>commit()</code><code>rollback()</code>方法。</span> </p>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../javax/sql/rowset/spi/SyncProviderException.html" title="class in javax.sql.rowset.spi">SyncProviderException</a></code> - 如果底层同步提供程序的写入程序无法将更新写回数据源
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/CachedRowSet.html#acceptChanges-java.sql.Connection-"><code>acceptChanges(java.sql.Connection)</code></a> <a href="../../../javax/sql/RowSetWriter.html" title="javax.sql中的接口"><code>RowSetWriter</code></a> <a href="../../../javax/sql/rowset/spi/SyncFactory.html" title="javax.sql.rowset.spi中的类"><code>SyncFactory</code></a> <a href="../../../javax/sql/rowset/spi/SyncProvider.html" title="javax.sql.rowset.spi中的类"><code>SyncProvider</code></a> <a href="../../../javax/sql/rowset/spi/SyncProviderException.html" title="javax.sql.rowset.spi中的类"><code>SyncProviderException</code></a> <a href="../../../javax/sql/rowset/spi/SyncResolver.html" title="javax.sql.rowset.spi中的接口"><code>SyncResolver</code></a></span>
</dd>
</dl> </li>
</ul> <a name="acceptChanges-java.sql.Connection-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>acceptChanges</h4> <pre>void acceptChanges(<a href="../../../java/sql/Connection.html" title="interface in java.sql">Connection</a> con)
throws <a href="../../../javax/sql/rowset/spi/SyncProviderException.html" title="class in javax.sql.rowset.spi">SyncProviderException</a></pre>
<div class="block">
<span>使用指定的<code>Connection</code>对象传播所有行更新,插入和删除对此<code>CachedRowSet</code>对象的数据源的更改,以建立与数据源的连接。</span>
<p> <span><code>acceptChanges</code>方法的其他版本不会传递连接,因为它使用<code>Connection</code>对象中已定义的<code>RowSet</code>对象,它是用于初始填充的连接。</span> </p>
<p> <span>方法<code>acceptChanges</code>这种形式与不带参数的形式相似;</span> <span>然而与其他形式不同只有当底层数据源是JDBC数据源时才能使用此表单。</span> <span>更新<code>Connection</code>属性必须由使用<code>SyncProvider</code>重置<code>RowSetWriter</code>配置,以确保所述的内容<code>CachedRowSet</code>对象被正确地同步。</span> </p>
<p> <span>当方法<code>acceptChanges</code>执行时,除了对数据源进行更改之外,还会使当前行中的值为原始行中的值。</span> </p>
<p> <span>根据正在使用的<code>SyncProvider</code>实现的同步级别,作者将将原始值与数据源中的值进行比较,以检查冲突。</span> <span>当有冲突时, <code>RIOptimisticProvider</code>实现,例如,抛出一个<code>SyncProviderException</code>并且不写任何数据源。</span> </p>
<p> <span>应用程序可以选择捕获<code>SyncProviderException</code>对象并检索其包含的<code>SyncResolver</code>对象。</span> <span><code>SyncResolver</code>对象<code>SyncResolver</code>列出冲突,并在数据源上设置锁定,以避免在当前冲突解决时发生冲突。</span> <span>此外,对于每个冲突,它提供了检查冲突并设置应该在数据源中持久存在的值的方法。</span> <span>所有冲突解决后,应用程序必须再次调用<code>acceptChanges</code>方法将解析的值写入数据源。</span> <span>如果数据源中的所有值都已经是要保留的值,方法<code>acceptChanges</code>什么都不做。</span> </p>
<p> <span>一些提供商的实现可以使用锁来确保没有冲突。</span> <span>在这种情况下,保证当调用方法<code>acceptChanges</code>时,写入程序将成功写入数据源的更改。</span> <span>这种方法可以立即方法后调用<code>updateRow</code> <code>insertRow</code> ,或<code>deleteRow</code>已经调用,但它是更有效的已作出的所有修改完成后,只有一个连接需要建立只有一次调用它。</span> </p>
<p> <span>注意: <code>acceptChanges()</code>方法将确定<code>COMMIT_ON_ACCEPT_CHANGES</code>是否设置为true。</span> <span>如果设置为true则同步中的所有更新都将提交到数据源。</span> <span>否则,应用程序<b>必须</b>明确地调用<code>commit</code><code>rollback</code>方法。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>con</code> - 标准的JDBC
<code>Connection</code>对象
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../javax/sql/rowset/spi/SyncProviderException.html" title="class in javax.sql.rowset.spi">SyncProviderException</a></code> - 如果底层同步提供程序的写入程序无法将更新写回数据源
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/CachedRowSet.html#acceptChanges--"><code>acceptChanges()</code></a> <a href="../../../javax/sql/RowSetWriter.html" title="javax.sql中的接口"><code>RowSetWriter</code></a> <a href="../../../javax/sql/rowset/spi/SyncFactory.html" title="javax.sql.rowset.spi中的类"><code>SyncFactory</code></a> <a href="../../../javax/sql/rowset/spi/SyncProvider.html" title="javax.sql.rowset.spi中的类"><code>SyncProvider</code></a> <a href="../../../javax/sql/rowset/spi/SyncProviderException.html" title="javax.sql.rowset.spi中的类"><code>SyncProviderException</code></a> <a href="../../../javax/sql/rowset/spi/SyncResolver.html" title="javax.sql.rowset.spi中的接口"><code>SyncResolver</code></a></span>
</dd>
</dl> </li>
</ul> <a name="restoreOriginal--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>restoreOriginal</h4> <pre>void restoreOriginal()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>将此<code>CachedRowSet</code>对象恢复为其原始值,即其最后一组更改前的值。</span>
<span>如果行集没有更改或只有一组更改,则原始值是<code>CachedRowSet</code><code>CachedRowSet</code>对象的值;</span>
<span>否则,原始值是其在当前值之前的值。</span>
<p> <span>调用此方法时, <code>CachedRowSet</code>实现必须确保将当前行集实例的所有更新,插入和删除替换为以前的值。</span> <span>此外,光标应该被重置为第一行,并且应该触发一个<code>rowSetChanged</code>事件来通知所有注册的监听器。</span> </p>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果发生错误,则将此
<code>CachedRowSet</code>对象的当前值推回到其先前的值
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/RowSetListener.html#rowSetChanged-javax.sql.RowSetEvent-"><code>RowSetListener.rowSetChanged(javax.sql.RowSetEvent)</code></a>
</dd>
</dl> </li>
</ul> <a name="release--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>release</h4> <pre>void release()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>释放此<code>CachedRowSet</code>对象的当前内容,并向所有注册的监听器发送一个<code>rowSetChanged</code>事件。</span>
<span>任何未完成的更新都将被丢弃,并且该行集在此方法被调用后不包含任何行。</span>
<span>没有与底层数据源的交互,任何行集内容,元数据和内容更新都应该是不可恢复的。</span>
<p> <span><code>CachedRowSet</code>对象应锁定,直到其内容和关联的更新完全清除,从而防止其他组件对“ <code>RowSet</code>对象的引用进行“脏”读取。</span> <span>此外,只有读取此<code>CachedRowSet</code>对象的所有组件完成读取,才能释放内容。</span> <span><code>CachedRowSet</code>对象应该在触发<code>rowSetChanged</code>事件后恢复正常行为。</span> </p>
<p> <span>元数据包括JDBC属性和同步SPI属性被维护以备将来使用。</span> <span>重要的是,诸如<code>command</code>属性的属性与最初建立此<code>CachedRowSet</code>对象的始发数据源相关。</span> </p>
<p> <span>该方法清空行集,而不是<code>close</code>方法它将整个行集标记为可恢复以允许垃圾收集器的行集的Java VM资源。</span> </p>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果发生错误,则会刷新此
<code>CachedRowSet</code>对象的内容
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/RowSetListener.html#rowSetChanged-javax.sql.RowSetEvent-"><code>RowSetListener.rowSetChanged(javax.sql.RowSetEvent)</code></a>
<a href="../../../java/sql/ResultSet.html#close--"><code>ResultSet.close()</code></a>
</dd>
</dl> </li>
</ul> <a name="undoDelete--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>undoDelete</h4> <pre>void undoDelete()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>取消删除当前行并通知侦听器行已更改。</span>
<span>调用此方法后,不再将当前行标记为删除。</span>
<span>可以在行集的生命周期内随时调用此方法。</span>
<p> <span>另外,可以通过使用任何光标位置控制方法来调整光标的位置来进行行删除的多次取消,例如:</span> </p>
<ul>
<li> <code>CachedRowSet.absolute</code> </li>
<li> <code>CachedRowSet.first</code> </li>
<li> <code>CachedRowSet.last</code> </li>
</ul>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果1当前行尚未被删除或者2光标位于插入行之前第一行之前或最后一行之后
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#undoInsert--"><code>undoInsert()</code></a>
<a href="../../../java/sql/ResultSet.html#cancelRowUpdates--"><code>ResultSet.cancelRowUpdates()</code></a>
</dd>
</dl> </li>
</ul> <a name="undoInsert--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>undoInsert</h4> <pre>void undoInsert()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>如果已插入该行,则<code>CachedRowSet</code>行从该<code>CachedRowSet</code>对象中删除,并通知侦听器行已更改。</span>
<span>可以在行集的生命周期中的任何时间调用此方法,并假设当前行在异常限制(见下文)内,它将取消当前行的行插入。</span>
<p> <span>此外,可以通过使用任何光标位置控制方法调整光标的位置来进行行插入的多次取消,例如:</span> </p>
<ul>
<li> <code>CachedRowSet.absolute</code> </li>
<li> <code>CachedRowSet.first</code> </li>
<li> <code>CachedRowSet.last</code> </li>
</ul>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果1当前行尚未插入或者2光标位于第一行之前最后一行之后或插入行上
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#undoDelete--"><code>undoDelete()</code></a>
<a href="../../../java/sql/ResultSet.html#cancelRowUpdates--"><code>ResultSet.cancelRowUpdates()</code></a>
</dd>
</dl> </li>
</ul> <a name="undoUpdate--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>undoUpdate</h4> <pre>void undoUpdate()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>如果该行已被修改,立即反转最后一次更新操作。</span>
<span>可以调用此方法来反转所有列的更新,直到一行中的所有更新在上次同步( <code>acceptChanges</code> )或群体之前已经回滚到其状态。</span>
<span>在执行插入行更新时也可以调用此方法。</span>
<p> <span><code>undoUpdate</code>可以在行集的生命期间的任何时间调用;</span> <span>然而,在发生同步之后,该方法直到进一步修改行集数据才有效果。</span> </p>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果光标位于第
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code>行中或第
<code>CachedRowSet</code>行中的最后一行之后
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#undoDelete--"><code>undoDelete()</code></a>
<a href="../../../javax/sql/rowset/CachedRowSet.html#undoInsert--"><code>undoInsert()</code></a>
<a href="../../../java/sql/ResultSet.html#cancelRowUpdates--"><code>ResultSet.cancelRowUpdates()</code></a>
</dd>
</dl> </li>
</ul> <a name="columnUpdated-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>columnUpdated</h4> <pre>boolean columnUpdated(int idx)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
指示此
<code>CachedRowSet</code>对象的当前行中的指定列是否已更新。
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>idx</code> - 一个
<code>int</code>标识要检查更新的列
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<span><code>true</code>如果指定列已被明显更新;</span>
<span><code>false</code>否则</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果游标在插入行上,在第一行之前或最后一行之后
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../java/sql/DatabaseMetaData.html#updatesAreDetected-int-"><code>DatabaseMetaData.updatesAreDetected(int)</code></a>
</dd>
</dl> </li>
</ul> <a name="columnUpdated-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>columnUpdated</h4> <pre>boolean columnUpdated(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> columnName)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
指示此
<code>CachedRowSet</code>对象的当前行中的指定列是否已更新。
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>columnName</code> - 一个
<code>String</code>对象,给出要检查更新的列的名称
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<span><code>true</code>如果列已被明显更新;</span>
<span><code>false</code>否则</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果游标在插入行上,在第一行之前或最后一行之后
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../java/sql/DatabaseMetaData.html#updatesAreDetected-int-"><code>DatabaseMetaData.updatesAreDetected(int)</code></a>
</dd>
</dl> </li>
</ul> <a name="toCollection--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>toCollection</h4> <pre><a href="../../../java/util/Collection.html" title="interface in java.util">Collection</a>&lt;?&gt; toCollection()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>这个转换<code>CachedRowSet</code>对象为<code>Collection</code>包含所有这些对象<code>CachedRowSet</code>对象的数据。</span>
<span>由于<code>Collection</code>框架的抽象性,实现方式在<code>Collection</code>这个<code>Collection</code>对象方面有一定的自由度。</span>
<span>每行必须完全以通用目的<code>Collection</code>实现或专门的<code>Collection</code>实现(例如<code>TreeMap</code>对象或<code>Vector</code>对象)进行表示。</span>
<span>一个SQL <code>NULL</code>列值必须表示为<code>null</code>的Java编程语言。</span>
<p> <span>对于标准的参考实现<code>CachedRowSet</code>接口使用<code>TreeMap</code>对象行集,每个行中的值被包含在<code>Vector</code>对象。</span> <span>预计大多数实现将会这样做。</span> </p>
<p> <span><code>TreeMap</code>类型的收藏保证了地图将按照升序的顺序,按照键的类的自然顺序进行排序。</span> <span>每个键引用一个<code>Vector</code>对应于一个行对象<code>RowSet</code>对象。</span> <span>因此,每个<code>Vector</code>对象的大小必须与<code>RowSet</code>对象中的列数完全相同。</span> <span><code>TreeMap</code>集合使用的密钥由实现决定,该实现可以通过<code>RowSet</code>对象本身或底层SQL数据上已设置的密钥来选择利用内部<code>RowSet</code>表格结构中可用的集合密钥。</span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>Collection</code>对象,其中包含此
<code>CachedRowSet</code>对象中每行的值
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果发生错误发生集合
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#toCollection-int-"><code>toCollection(int)</code></a>
<a href="../../../javax/sql/rowset/CachedRowSet.html#toCollection-java.lang.String-"><code>toCollection(String)</code></a>
</dd>
</dl> </li>
</ul> <a name="toCollection-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>toCollection</h4> <pre><a href="../../../java/util/Collection.html" title="interface in java.util">Collection</a>&lt;?&gt; toCollection(int column)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>将此<code>CachedRowSet</code>对象中的指定列转换为<code>Collection</code>对象。</span>
<span>由于<code>Collection</code>框架的抽象性,实现方式在<code>Collection</code>这个<code>Collection</code>对象方面有一定的自由度。</span>
<span>每一列的值应完全用通用目的<code>Collection</code>实现或专门的<code>Collection</code>实现,如<code>Vector</code>对象。</span>
<span>一个SQL <code>NULL</code>列值必须表示为<code>null</code>的Java编程语言。</span>
<p> <span>标准参考实现使用<code>Vector</code>对象来包含列值,并且预计大多数实现将执行相同的操作。</span> <span>如果使用<code>Vector</code>对象,则其大小必须与此<code>CachedRowSet</code>对象中的行数完全相等。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>column</code> - 一个
<code>int</code>表示其值将在
<code>Collection</code>对象中表示的
<code>Collection</code>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>Collection</code>对象,其中包含存储在此
<code>CachedRowSet</code>对象的指定列中的值
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果生成集合时发生错误或提供了无效的列ID
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#toCollection--"><code>toCollection()</code></a>
<a href="../../../javax/sql/rowset/CachedRowSet.html#toCollection-java.lang.String-"><code>toCollection(String)</code></a>
</dd>
</dl> </li>
</ul> <a name="toCollection-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>toCollection</h4> <pre><a href="../../../java/util/Collection.html" title="interface in java.util">Collection</a>&lt;?&gt; toCollection(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> column)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>将此<code>CachedRowSet</code>对象中的指定列转换为<code>Collection</code>对象。</span>
<span>由于<code>Collection</code>框架的抽象性质,实现<code>Collection</code>在如何表示这个<code>Collection</code>对象方面有一定的自由度。</span>
<span>每个列值应完全以通用目的<code>Collection</code>实现或专门的<code>Collection</code>实现(例如<code>Vector</code>对象)表示。</span>
<span>一个SQL <code>NULL</code>列值必须表示为<code>null</code>的Java编程语言。</span>
<p> <span>标准参考实现使用<code>Vector</code>对象来包含列值,并且预期大多数实现将执行相同操作。</span> <span>如果使用<code>Vector</code>对象,则其大小必须与此<code>CachedRowSet</code>对象中的行数完全相等。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>column</code> - 一个
<code>String</code>对象,给出其值要在一个集合中表示的列的名称
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>Collection</code>对象,其中包含存储在此
<code>CachedRowSet</code>对象的指定列中的值
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果生成集合时发生错误或提供了无效的列ID
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#toCollection--"><code>toCollection()</code></a>
<a href="../../../javax/sql/rowset/CachedRowSet.html#toCollection-int-"><code>toCollection(int)</code></a>
</dd>
</dl> </li>
</ul> <a name="getSyncProvider--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getSyncProvider</h4> <pre><a href="../../../javax/sql/rowset/spi/SyncProvider.html" title="class in javax.sql.rowset.spi">SyncProvider</a> getSyncProvider()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>检索<code>SyncProvider</code>执行此<code>CachedRowSet</code>对象。</span>
<span>在内部,行方法使用此方法来触发行集和数据源之间的读取或写入操作。</span>
<span>例如,行集可能需要从<code>SyncProvider</code>获取行集读取器( <code>RowSetReader</code>对象)上的<code>SyncProvider</code> ,以允许行集被填充。</span>
<pre> <span>RowSetReader rowsetReader = null;
SyncProvider provider =
SyncFactory.getInstance("javax.sql.rowset.provider.RIOptimisticProvider");
if (provider instanceof RIOptimisticProvider) {
rowsetReader = provider.getRowSetReader();
}</span> </pre>
<span>假设<i>rowsetReader</i>是行集<i>执行</i>中的一个私有的可访问字段,当应用程序调用<code>execute</code>方法时,它依次调用读者的<code>readData</code>方法来填充<code>RowSet</code>对象。</span>
<pre> <span>rowsetReader.readData((RowSetInternal)this);</span> </pre>
<p> <span>此外,应用程序可以使用此方法返回的<code>SyncProvider</code>对象来调用返回有关<code>SyncProvider</code>对象的信息的方法,包括有关供应商,版本,提供商标识,同步等级以及当前设置的锁定的信息。</span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
当行集实例化时设置的
<code>SyncProvider</code>对象,或者如果没有设置,则默认提供程序
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果在返回
<code>SyncProvider</code>对象时发生错误
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#setSyncProvider-java.lang.String-"><code>setSyncProvider(java.lang.String)</code></a>
</dd>
</dl> </li>
</ul> <a name="setSyncProvider-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>setSyncProvider</h4> <pre>void setSyncProvider(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> provider)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>设置<code>SyncProvider</code>此对象<code>CachedRowSet</code>对象到指定的一个。</span>
<span>该方法允许重置<code>SyncProvider</code>对象。</span>
<p> <span><code>CachedRowSet</code>实现应始终使用可用的SyncProvider <code>SyncProvider</code>实例化,但是有些情况下需要或需要重置<code>SyncProvider</code>对象。</span> <span>例如,应用程序可能希望一次使用默认的<code>SyncProvider</code>对象,然后选择使用最近可用的提供程序,并更好地满足其需求。</span> </p>
<p> <span>重置<code>SyncProvider</code>对象会导致<code>RowSet</code>对象从<code>SyncFactory</code>请求新的<code>SyncProvider</code> <code>SyncFactory</code></span> <span>这具有重置所有以前的连接和与始发数据源的关系的效果,并且可能潜在地彻底改变断开的行集的同步行为。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>provider</code> -一个
<code>String</code>对象给出的完全限定类名
<code>SyncProvider</code>实施
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果在尝试重置
<code>SyncProvider</code>实现时发生错误
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#getSyncProvider--"><code>getSyncProvider()</code></a>
</dd>
</dl> </li>
</ul> <a name="size--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>size</h4> <pre>int size()</pre>
<div class="block">
返回此
<code>CachedRowSet</code>对象中的行数。
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
行集中的行数
</dd>
</dl> </li>
</ul> <a name="setMetaData-javax.sql.RowSetMetaData-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>setMetaData</h4> <pre>void setMetaData(<a href="../../../javax/sql/RowSetMetaData.html" title="interface in javax.sql">RowSetMetaData</a> md)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>使用给定的<code>RowSetMetaData</code>对象设置此<code>CachedRowSet</code>对象的元数据。</span>
<span><code>RowSetReader</code>对象正在读取行集的内容时,它将创建一个<code>RowSetMetaData</code>对象并使用RowSetMetaData实现中的方法<code>RowSetMetaData</code>初始化。</span>
<span>参考实现使用<code>RowSetMetaDataImpl</code>类。</span>
<span>当阅读器完成阅读行集内容时,内部调用此方法将<code>RowSetMetaData</code>对象传递给行集。</span>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>md</code> - 一个
<code>RowSetMetaData</code>对象,其中包含有关此
<code>CachedRowSet</code>对象中的列的元数据
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果无效的元数据提供给行集
</dd>
</dl> </li>
</ul> <a name="getOriginal--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getOriginal</h4> <pre><a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a> getOriginal()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>返回一个<code>ResultSet</code><code>CachedRowSet</code>对象的原始值的<code>CachedRowSet</code>对象。</span>
<p> <span><code>ResultSet</code>对象的光标应位于第一行之前。</span> <span>此外,返回的<code>ResultSet</code>对象应具有以下属性:</span> </p>
<ul>
<li> <span>ResultSet.TYPE_SCROLL_INSENSITIVE</span> </li>
<li> <span>ResultSet.CONCUR_UPDATABLE</span> </li>
</ul>
<p> <span><code>RowSet</code>对象的原始值是在与底层数据源进行最后一次同步之前的值。</span> <span>如果没有同步,则原始值将是<code>RowSet</code>对象的值。</span> <span>当应用程序调用方法<code>acceptChanges</code>并且<code>SyncProvider</code>对象已被实现以检查冲突时,此方法在内部被调用。</span> <span>如果是这种情况,写入器将原始值与当前数据源中的值进行比较以检查冲突。</span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>ResultSet</code>对象,其中包含此
<code>CachedRowSet</code>对象的原始值
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果发生错误,产生
<code>ResultSet</code>对象
</dd>
</dl> </li>
</ul> <a name="getOriginalRow--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getOriginalRow</h4> <pre><a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a> getOriginalRow()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>返回一个<code>ResultSet</code>对象,该对象包含仅此<code>CachedRowSet</code>对象的当前行的原始值。</span>
<p> <span><code>ResultSet</code>对象的光标应位于第一行之前。</span> <span>此外,返回的<code>ResultSet</code>对象应具有以下属性:</span> </p>
<ul>
<li> <span>ResultSet.TYPE_SCROLL_INSENSITIVE</span> </li>
<li> <span>ResultSet.CONCUR_UPDATABLE</span> </li>
</ul>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
行的原始结果集
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果没有当前行
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#setOriginalRow--"><code>setOriginalRow()</code></a>
</dd>
</dl> </li>
</ul> <a name="setOriginalRow--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>setOriginalRow</h4> <pre>void setOriginalRow()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>将此<code>CachedRowSet</code>对象中的当前行设置为原始行。</span>
<p> <span>在当前行中的任何修改值与数据源同步之后,此方法被内部调用。</span> <span>当前行必须被标记为不再插入,删除或更新。</span> </p>
<p> <span>致电<code>setOriginalRow</code>是不可逆转的。</span> </p>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果没有当前行或遇到错误,重置原始行的内容
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#getOriginalRow--"><code>getOriginalRow()</code></a>
</dd>
</dl> </li>
</ul> <a name="getTableName--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getTableName</h4> <pre><a href="../../../java/lang/String.html" title="class in java.lang">String</a> getTableName()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>返回用于创建此<code>CachedRowSet</code>对象的对象(表)的<code>CachedRowSet</code></span>
<span>该名称可以在多个场合设置,并且规范对这可能发生的次数没有限制,或者标准实现是否应该跟踪先前的表名。</span>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>String</code>对象,给出作为该
<code>CachedRowSet</code>对象的数据源的表的名称,如果没有为表设置名称,
<code>null</code>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果返回表名遇到错误
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../java/sql/ResultSetMetaData.html#getTableName-int-"><code>ResultSetMetaData.getTableName(int)</code></a>
</dd>
</dl> </li>
</ul> <a name="setTableName-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>setTableName</h4> <pre>void setTableName(<a href="../../../java/lang/String.html" title="class in java.lang">String</a> tabName)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>设置从此导出的<code>CachedRowSet</code>对象到给定表名称的表的标识符。</span>
<span>在同步尝试期间,当将数据源中的值与<code>CachedRowSet</code>对象的值进行比较时,作者将使用此名称来确定使用哪个表。</span>
<span>表标识符还指示应写入此<code>CachedRowSet</code>对象的修改值。</span>
<p> <span><code>CachedRowSet</code>对象的实现可以从<code>RowSetMetaDataImpl</code>对象获取内部名称。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>tabName</code> - 一个<code>String</code>对象,用于标识此<code>CachedRowSet</code>对象的导出表;</span>
<span>不能是<code>null</code>但可能是一个空字符串</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果遇到命名表或
<i>tabName</i>的错误是
<code>null</code>
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/RowSetMetaData.html#setTableName-int-java.lang.String-"><code>RowSetMetaData.setTableName(int, java.lang.String)</code></a> <a href="../../../javax/sql/RowSetWriter.html" title="javax.sql中的接口"><code>RowSetWriter</code></a> <a href="../../../javax/sql/rowset/spi/SyncProvider.html" title="javax.sql.rowset.spi中的类"><code>SyncProvider</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getKeyColumns--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getKeyColumns</h4> <pre>int[] getKeyColumns()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
返回一个数组,其中包含一个或多个列号,表示形成唯一标识此
<code>CachedRowSet</code>对象行的键的列。
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<span>一个数组,包含列号或数字,表示哪个列构成此<code>CachedRowSet</code>对象中的一行的主键。</span>
<span>如果没有列代表主键,则此数组应为空。</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果此
<code>CachedRowSet</code>对象为空
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#setKeyColumns-int:A-"><code>setKeyColumns(int[])</code></a>
<a href="../../../javax/sql/rowset/Joinable.html#getMatchColumnIndexes--"><code>Joinable.getMatchColumnIndexes()</code></a>
<a href="../../../javax/sql/rowset/Joinable.html#getMatchColumnNames--"><code>Joinable.getMatchColumnNames()</code></a>
</dd>
</dl> </li>
</ul> <a name="setKeyColumns-int:A-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>setKeyColumns</h4> <pre>void setKeyColumns(int[] keys)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>将此<code>CachedRowSet</code>对象的<code>keyCols</code>字段设置为给定的列号数组,这样形成一个唯一标识该<code>CachedRowSet</code>对象行的键。</span>
<p> <span>如果一个<code>CachedRowSet</code>对象成为一个的一部分<code>JoinRowSet</code>对象,并将所得约束用这种方法定义的键被保持如果列指定为键列也成为匹配列。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>keys</code> -的阵列<code>int</code>表示形成用于此一主键的列<code>CachedRowSet</code>对象;</span>
<span>数组中的每个元素必须大于<code>0</code>且小于或等于此行集中的列数</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果给定数组中的任何数字对此行集无效
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#getKeyColumns--"><code>getKeyColumns()</code></a>
<a href="../../../javax/sql/rowset/Joinable.html#setMatchColumn-java.lang.String-"><code>Joinable.setMatchColumn(String)</code></a>
<a href="../../../javax/sql/rowset/Joinable.html#setMatchColumn-int-"><code>Joinable.setMatchColumn(int)</code></a>
</dd>
</dl> </li>
</ul> <a name="createShared--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>createShared</h4> <pre><a href="../../../javax/sql/RowSet.html" title="interface in javax.sql">RowSet</a> createShared()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>返回一个新<code>RowSet</code>通过相同的数据与此的支持对象<code>CachedRowSet</code>对象。</span>
<span>实际上, <code>CachedRowSet</code>对象都有一个游标在相同的数据上。</span>
<span>因此,重复的所有更改对原件和任何其他重复项都是可见的,正如原件所做的更改对其所有重复项都可见。</span>
<span>如果一个重复调用一个更改底层数据的方法,它调用的方法通知所有注册的监听器,就像原始的<code>CachedRowSet</code>对象调用一样。</span>
<p> <span>此外,此方法创建的任何<code>RowSet</code>对象将具有与此<code>CachedRowSet</code>对象相同的属性。</span> <span>例如,如果这个<code>CachedRowSet</code>对象是只读的,它的所有重复项也将是只读的。</span> <span>如果更改为可更新,则重复项也可更新。</span> </p>
<p> <span>注意:如果多个线程访问<code>RowSet</code>从创建的对象<code>createShared()</code>方法,以下行为被指定为保护共享数据的完整性:读取和写入所有共享的<code>RowSet</code>目的应被每个对象和单个底层表结构之间连续制造。</span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个新的共享的
<code>RowSet</code>对象具有与此
<code>CachedRowSet</code>对象相同的属性,并且具有相同数据的游标
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果发生错误或基础平台不支持克隆
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/RowSetEvent.html" title="javax.sql中的类"><code>RowSetEvent</code></a> <a href="../../../javax/sql/RowSetListener.html" title="javax.sql中的接口"><code>RowSetListener</code></a></span>
</dd>
</dl> </li>
</ul> <a name="createCopy--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>createCopy</h4> <pre><a href="../../../javax/sql/rowset/CachedRowSet.html" title="interface in javax.sql.rowset">CachedRowSet</a> createCopy()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>创建一个<code>RowSet</code>对象,这是该<code>CachedRowSet</code>对象中的数据的深层副本。</span>
<span>与此相反的<code>RowSet</code>从生成的对象<code>createShared</code>号召,在原有的副本所做的更新<code>RowSet</code>对象必须是不可见的原<code>RowSet</code>对象。</span>
<span>此外,任何在原始<code>RowSet</code>事件监听<code>RowSet</code>都不得超过新的<code>RowSet</code>副本。</span>
<span>另外,必须保持建立的约束限制。</span>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个新的
<code>RowSet</code>对象是这个
<code>CachedRowSet</code>对象的深层副本,完全独立于此
<code>CachedRowSet</code>对象
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果在生成此
<code>CachedRowSet</code>对象的副本时发生错误
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/CachedRowSet.html#createShared--"><code>createShared()</code></a> <a href="../../../javax/sql/rowset/CachedRowSet.html#createCopySchema--"><code>createCopySchema()</code></a> <a href="../../../javax/sql/rowset/CachedRowSet.html#createCopyNoConstraints--"><code>createCopyNoConstraints()</code></a> <a href="../../../javax/sql/RowSetEvent.html" title="javax.sql中的类"><code>RowSetEvent</code></a> <a href="../../../javax/sql/RowSetListener.html" title="javax.sql中的接口"><code>RowSetListener</code></a></span>
</dd>
</dl> </li>
</ul> <a name="createCopySchema--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>createCopySchema</h4> <pre><a href="../../../javax/sql/rowset/CachedRowSet.html" title="interface in javax.sql.rowset">CachedRowSet</a> createCopySchema()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>创建一个<code>CachedRowSet</code>对象,该对象是该<code>CachedRowSet</code>对象的空白副本。</span>
<span>副本不得包含任何内容,但仅代表原始<code>CachedRowSet</code>对象的表结构。</span>
<span>另外,起始<code>CachedRowSet</code>对象中设置的主键或外键约束必须在新的空的<code>CachedRowSet</code>对象中同样强制执行。</span>
<span>与此相反的<code>RowSet</code>从生成的对象<code>createShared</code>方法调用,更新此副本所做<code>CachedRowSet</code>与对象<code>createCopySchema</code>方法不能是可见。</span>
<p> <span>应用程序可以从此方法返回的<code>WebRowSet</code>对象中形成<code>CachedRowSet</code>对象,以便将<code>RowSet</code>模式定义导出为XML以供将来使用。</span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
这个
<code>CachedRowSet</code>对象的空拷贝
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果在克隆此
<code>CachedRowSet</code>对象的结构中发生错误
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/CachedRowSet.html#createShared--"><code>createShared()</code></a> <a href="../../../javax/sql/rowset/CachedRowSet.html#createCopySchema--"><code>createCopySchema()</code></a> <a href="../../../javax/sql/rowset/CachedRowSet.html#createCopyNoConstraints--"><code>createCopyNoConstraints()</code></a> <a href="../../../javax/sql/RowSetEvent.html" title="javax.sql中的类"><code>RowSetEvent</code></a> <a href="../../../javax/sql/RowSetListener.html" title="javax.sql中的接口"><code>RowSetListener</code></a></span>
</dd>
</dl> </li>
</ul> <a name="createCopyNoConstraints--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>createCopyNoConstraints</h4> <pre><a href="../../../javax/sql/rowset/CachedRowSet.html" title="interface in javax.sql.rowset">CachedRowSet</a> createCopyNoConstraints()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>创建一个<code>CachedRowSet</code>对象,该对象是此<code>CachedRowSet</code>对象数据的深层副本,但与之无关。</span>
<span>与从<code>createShared</code>方法调用生成的<code>RowSet</code>对象不同,对此<code>CachedRowSet</code>对象的副本的更新不能对其可见。</span>
<span>此外,任何在此<code>CachedRowSet</code>对象上注册的事件侦听器都不得超过新的<code>RowSet</code>对象的范围。</span>
<span>此外,对于该建立的任何约束限制<code>CachedRowSet</code>对象<b>不得</b>在副本中维持。</span>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个新的
<code>CachedRowSet</code>对象,这是这个
<code>CachedRowSet</code>对象的深层副本,完全独立于这个
<code>CachedRowSet</code>对象
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果在生成此
<code>CachedRowSet</code>对象的副本时发生错误
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/CachedRowSet.html#createCopy--"><code>createCopy()</code></a> <a href="../../../javax/sql/rowset/CachedRowSet.html#createShared--"><code>createShared()</code></a> <a href="../../../javax/sql/rowset/CachedRowSet.html#createCopySchema--"><code>createCopySchema()</code></a> <a href="../../../javax/sql/RowSetEvent.html" title="javax.sql中的类"><code>RowSetEvent</code></a> <a href="../../../javax/sql/RowSetListener.html" title="javax.sql中的接口"><code>RowSetListener</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getRowSetWarnings--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getRowSetWarnings</h4> <pre><a href="../../../javax/sql/rowset/RowSetWarning.html" title="class in javax.sql.rowset">RowSetWarning</a> getRowSetWarnings()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>检索通过此<code>RowSet</code>对象的呼叫报告的第一个警告。</span>
<span><code>RowSet</code>对象的后续警告将链接到此方法返回的<code>RowSetWarning</code>对象。</span>
<span>每次阅读新行时,警告链都会自动清除。</span>
<span>对已经关闭的RowSet对象可能不调用此方法;</span>
<span>这样做会造成<code>SQLException</code>被抛出。</span>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
RowSet
<code>RowSetWarning</code>报告的第一个
<code>RowSetWarning</code>对象如果没有则返回null
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果这个方法在一个封闭的RowSet上被调用
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/RowSetWarning.html" title="javax.sql.rowset中的类"><code>RowSetWarning</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getShowDeleted--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getShowDeleted</h4> <pre>boolean getShowDeleted()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>检索一个<code>boolean</code>指示标记为删除的行是否显示在当前行的集合中。</span>
<span>如果返回<code>true</code> ,则删除的行与当前行可见。</span>
<span>如果返回<code>false</code> ,则行与当前行的集合不可见。</span>
<span>默认值为<code>false</code></span>
<p> <span>由于安全考虑或标准行集实现可能会选择限制此行为,或者更适合某些部署方案。</span> <span>这被定义为实现,并不代表标准行为。</span> </p>
<p> <span>注意允许删除的行保持可见使一些标准JDBC <code>RowSet</code>实现方法的行为<code>RowSet</code>化。</span> <span>然而,大多数行集用户可以简单地忽略这个额外的细节,因为只有非常专门的应用程序可能希望利用此功能。</span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<span><code>true</code>如果删除的行是可见的;</span>
<span><code>false</code>否则</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果行集实现无法确定标记为删除的行是否可见
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#setShowDeleted-boolean-"><code>setShowDeleted(boolean)</code></a>
</dd>
</dl> </li>
</ul> <a name="setShowDeleted-boolean-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>setShowDeleted</h4> <pre>void setShowDeleted(boolean b)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>将属性<code>showDeleted</code>设置为给定的<code>boolean</code>值,该值确定标记为删除的行是否显示在当前行的集合中。</span>
<span>如果值设置为<code>true</code> ,则删除的行将立即与当前行的集合一起显示。</span>
<span>如果该值设置为<code>false</code> ,则删除的行将被设置为与当前行集不可见。</span>
<p> <span>由于安全考虑或标准行集实现可能会选择限制此行为,或者更适合某些部署方案。</span> <span>这被定义为实现,并不代表标准行为。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>b</code> - <code>true</code>如果删除的行应该显示;</span>
<span><code>false</code>否则</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果行集实现无法重置删除的行是否应该可见
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sql/rowset/CachedRowSet.html#getShowDeleted--"><code>getShowDeleted()</code></a>
</dd>
</dl> </li>
</ul> <a name="commit--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>commit</h4> <pre>void commit()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>每个<code>CachedRowSet</code>对象的<code>SyncProvider</code>包含一个<code>Connection</code>对象从<code>ResultSet</code>或JDBC属性传递给它的构造函数。</span>
<span>此方法包含<code>Connection</code>提交方法,以允许灵活的自动提交或非自动提交事务控制支持。</span>
<p> <span>进行<code>acceptChanges()</code>方法执行的所有更改,因为先前的提交/回滚永久性。</span> <span>只有当自动提交模式被禁用时,才应该使用此方法。</span> </p>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果发生数据库访问错误或此CachedRowSet内的此
<code>CachedRowSet</code>对象处于自动提交模式
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../java/sql/Connection.html#setAutoCommit-boolean-"><code>Connection.setAutoCommit(boolean)</code></a>
</dd>
</dl> </li>
</ul> <a name="rollback--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>rollback</h4> <pre>void rollback()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>每个<code>CachedRowSet</code>对象的<code>SyncProvider</code>包含来自原始<code>ResultSet</code>或传递给它的JDBC属性的<code>Connection</code>对象。</span>
<p> <span>撤消在当前事务中所做的所有更改。</span> <span>只有当自动提交模式被禁用时,才应该使用此方法。</span> </p>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果发生数据库访问错误或此CachedRowSet内的此
<code>CachedRowSet</code>对象处于自动提交模式。
</dd>
</dl> </li>
</ul> <a name="rollback-java.sql.Savepoint-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>rollback</h4> <pre>void rollback(<a href="../../../java/sql/Savepoint.html" title="interface in java.sql">Savepoint</a> s)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>每个<code>CachedRowSet</code>对象的<code>SyncProvider</code>包含一个<code>Connection</code>对象,从原始的<code>ResultSet</code>或传递给它的JDBC属性。</span>
<p> <span>将当前事务中所做的所有更改撤回到最后一个<code>Savepoint</code>事务标记。</span> <span>只有当自动提交模式被禁用时,才应该使用此方法。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>s</code> - A
<code>Savepoint</code>交易标记
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> -如果发生数据库访问错误或者此内的Connection对象
<code>CachedRowSet</code>是在自动提交模式。
</dd>
</dl> </li>
</ul> <a name="rowSetPopulated-javax.sql.RowSetEvent-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>rowSetPopulated</h4> <pre>void rowSetPopulated(<a href="../../../javax/sql/RowSetEvent.html" title="class in javax.sql">RowSetEvent</a> event,
int numRows)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>通知已注册的侦听器给定的RowSetEvent对象中的RowSet对象已经填充了许多其他行。</span>
<span><code>numRows</code>参数确保此事件将仅在每个<code>numRow</code></span>
<p> <span>事件的源可以使用event.getSource方法检索。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>event</code> - 一个
<code>RowSetEvent</code>对象,其中包含作为事件源的
<code>RowSet</code>对象
</dd>
<dd>
<span><code>numRows</code> -填充时,行间隔的数目在其上<code>CachedRowSet</code>填充应该火;</span>
<span>默认值为零;</span>
<span>不能小于<code>fetchSize</code>或零</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> -
<code>numRows &lt; 0 or numRows &lt; getFetchSize()</code>
</dd>
</dl> </li>
</ul> <a name="populate-java.sql.ResultSet-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>populate</h4> <pre>void populate(<a href="../../../java/sql/ResultSet.html" title="interface in java.sql">ResultSet</a> rs,
int startRow)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>填充此<code>CachedRowSet</code>从给定数据对象<code>ResultSet</code>对象。</span>
<span>而相关的<code>populate(ResultSet)</code>显示方法,追加参数以允许启动内的位置<code>ResultSet</code>从那里到数据填充CachedRowSet实例。</span>
<p> <span>当应用程序连接到打开的<code>ResultSet</code>对象时,此方法可用作<code>execute</code>方法的<code>execute</code>方法。</span> <span>使用方法<code>populate</code>可以比使用不具有参数的版本的<code>execute</code>方法更有效,因为它不会打开新连接并重新执行此<code>CachedRowSet</code>对象的命令。</span> <span>与使用<code>ResultSet</code>对象的<code>execute</code>版本相比,使用<code>populate</code>方法更<code>ResultSet</code></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>startRow</code> -在位置
<code>ResultSet</code>从哪里开始在此填充记录
<code>CachedRowSet</code>
</dd>
<dd>
<code>rs</code> -所述
<code>ResultSet</code>包含数据对象读入此
<code>CachedRowSet</code>对象
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果提供了空值为
<code>ResultSet</code>对象,或者该
<code>CachedRowSet</code>对象无法检索到关联的
<code>ResultSetMetaData</code>对象
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sql/rowset/CachedRowSet.html#execute-java.sql.Connection-"><code>execute(java.sql.Connection)</code></a> <a href="../../../javax/sql/rowset/CachedRowSet.html#populate-java.sql.ResultSet-"><code>populate(ResultSet)</code></a> <a href="../../../java/sql/ResultSet.html" title="java.sql中的接口"><code>ResultSet</code></a> <a href="../../../java/sql/ResultSetMetaData.html" title="java.sql中的接口"><code>ResultSetMetaData</code></a></span>
</dd>
</dl> </li>
</ul> <a name="setPageSize-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>setPageSize</h4> <pre>void setPageSize(int size)
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>设置<code>CachedRowSet</code>对象的页面大小。</span>
<span>A <code>CachedRowSet</code>可以被配置为以页面大小的批量批量填充自身。</span>
<span>当任<code>populate()</code><code>execute()</code>被调用, <code>CachedRowSet</code>根据用于填充RowSet的原始SQL查询获取额外的页面。</span>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>size</code> -在页面大小
<code>CachedRowSet</code>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果设置
<code>CachedRowSet</code>页面大小或页面大小小于0时发生错误。
</dd>
</dl> </li>
</ul> <a name="getPageSize--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getPageSize</h4> <pre>int getPageSize()</pre>
<div class="block">
返回
<code>CachedRowSet</code>对象的页面大小
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>int</code>页面大小
</dd>
</dl> </li>
</ul> <a name="nextPage--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>nextPage</h4> <pre>boolean nextPage()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>递增的当前页<code>CachedRowSet</code></span>
<span>这将导致<code>CachedRowSet</code>实现获取下一个页面大小的行并填充RowSet如果剩余行仍在用于填充RowSet的原始SQL查询范围内。</span>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<span>如果存在更多页面则为true;</span>
<span>如果这是最后一页则为false</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果获取下一页出现错误,或者在填充或执行之前过早调用此方法。
</dd>
</dl> </li>
</ul> <a name="previousPage--">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>previousPage</h4> <pre>boolean previousPage()
throws <a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></pre>
<div class="block">
<span>递减的当前页<code>CachedRowSet</code></span>
<span>这将导致<code>CachedRowSet</code>实现获取前一个页面大小的行并填充RowSet。</span>
<span>前一页中返回的行数必须始终保留在用于填充RowSet的原始SQL查询的范围内。</span>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<span>如果前一页被成功检索则为true;</span>
<span>如果这是第一页则为false。</span>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/sql/SQLException.html" title="class in java.sql">SQLException</a></code> - 如果获取上一页出现错误,或者在填充或执行前过早调用此方法。
</dd>
</dl> </li>
</ul> </li>
</ul> </li>
</ul>
</div>
</div>