⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cachedrowset.htm

📁 Sun的高速缓存CachedRowSet方案资料档
💻 HTM
📖 第 1 页 / 共 5 页
字号:
对象在内存中存储数据,所以它在任一时间可以包含的数据量是由可用的内存量决定的。要避开此限制,<CODE>CachedRowSet</CODE> 
对象可以数据块(称为<I>页</I>)的形式从 <CODE>ResultSet</CODE> 对象中检索数据。要利用此机制,应用程序应使用方法 
<CODE>setPageSize</CODE> 设置一页中要包括的行数。换句话说,如果页大小设置为 5,则一次从数据源中获取一个 5 
行的数据块。应用程序也可选择设置一次可获取的最大行数。如果最大行数设置为 0,或者未设置最大行数,则对一次获取的行数没有限制。 
<P>设置各个属性后,必须使用方法 <CODE>populate</CODE> 或方法 <CODE>execute</CODE> 用数据填充 
<CODE>CachedRowSet</CODE> 对象。以下代码行演示了如何使用方法 
<CODE>populate</CODE>。注意,该方法的这种形式采用两个参数,<CODE>ResultSet</CODE> 句柄和 
<CODE>ResultSet</CODE> 对象中的行,从该行开始检索各行。 <PRE>     CachedRowSet crs = new CachedRowSetImpl();
     crs.setMaxRows(20);
     crs.setPageSize(4);
     crs.populate(rsHandle, 10);
 </PRE>运行此代码时,将使用 <I>rsHandle</I> 中从第 10 行开始的 4 行数据填充 <I>crs</I>。 
<P>下一个代码片断展示了如何使用方法 <CODE>execute</CODE> 填充 <CODE>CachedRowSet</CODE> 对象,该方法可以采用 
<CODE>Connection</CODE> 对象作为一个参数,也可以不采用。此代码向 <CODE>execute</CODE> 传递 
<CODE>Connection</CODE> 对象 <I>conHandle</I>。 
<P>注意,以下代码片断和上述代码片断有两处差别。首先,没有调用方法 <CODE>setMaxRows</CODE>,所以没有对 <I>crs</I> 
可以包含的行数设置限制。(记住,对于 <I>crs</I> 在内存中可以存储的数据量,总是有一个最高限制。)第二个差别是不能向方法 
<CODE>execute</CODE> 传递 <CODE>ResultSet</CODE> 对象中起始检索行的行号。此方法始终从第一行开始检索。 <PRE>     CachedRowSet crs = new CachedRowSetImpl();
     crs.setPageSize(5);
     crs.execute(conHandle);
 </PRE>运行此代码后,<I>crs</I> 将包含由 <I>crs</I> 的命令所生成的 <CODE>ResultSet</CODE> 对象中的 5 
行数据。<I>crs</I> 的 writer 将使用 <I>conHandle</I> 连接数据源并执行 <I>crs</I> 的命令。然后应用程序就能够在 
<I>crs</I> 中的数据上进行操作,方式与在任何其他 <CODE>CachedRowSet</CODE> 对象的数据上进行操作的方式相同。 
<P>要访问下一页(数据块),应用程序可调用方法 <CODE>nextPage</CODE>。此方法创建新的 <CODE>CachedRowSet</CODE> 
对象并用下一页的数据填充。例如,假定 <CODE>CachedRowSet</CODE> 对象的命令返回一个具有 1000 行数据的 
<CODE>ResultSet</CODE> 对象 <I>rs</I>。如果页大小设置为 100,则首次调用方法 <CODE>nextPage</CODE> 
将创建一个包含 <I>rs</I> 前 100 行的 <CODE>CachedRowSet</CODE> 对象。在使用这前 100 
行的数据执行完所需的操作后,应用程序可以再次调用方法 <CODE>nextPage</CODE> 创建另一个带有 <I>rs</I> 第二个 100 行数据的 
<CODE>CachedRowSet</CODE> 对象。第一个 <CODE>CachedRowSet</CODE> 
对象中的数据不再存在于内存中,因为它已被第二个 <CODE>CachedRowSet</CODE> 对象的数据替换了。调用方法 
<CODE>nextPage</CODE> 10 次后,第十个 <CODE>CachedRowSet</CODE> 对象将包含 <I>rs</I> 最后 100 
行存储在内存中的数据。在任意给定时间,内存中仅存储一个 <CODE>CachedRowSet</CODE> 对象的数据。 
<P>只要当前页不是各行的最后一页,方法 <CODE>nextPage</CODE> 就返回 <CODE>true</CODE>,没有其他页时,则返回 
<CODE>false</CODE>。因此,可在 <CODE>while</CODE> 循环中使用它来检索所有页,正如在以下代码行中所演示的。 <PRE>     CachedRowSet crs = CachedRowSetImpl();
     crs.setPageSize(100);
     crs.execute(conHandle);

     while(crs.next() {
     . . . // operate on first chunk of 100 rows in crs, row by row
     }

     while(crs.nextPage()) {
         while(crs.next()) {
             . . . // operate on the subsequent chunks (of 100 rows each) in crs, 
                   // row by row
         }
     }
 </PRE>运行此代码片断后,应用程序会遍历所有 1000 行,但是每次内存中的数据只有 100 行。 
<P><CODE>CachedRowSet</CODE> 接口还定义了方法 <CODE>previousPage</CODE>。正如方法 
<CODE>nextPage</CODE> 类似于 <CODE>ResultSet</CODE> 方法 <CODE>next</CODE>,方法 
<CODE>previousPage</CODE> 也类似于 <CODE>ResultSet</CODE> 方法 
<CODE>previous</CODE>。与方法 <CODE>nextPage</CODE> 类似,<CODE>previousPage</CODE> 
创建一个 <CODE>CachedRowSet</CODE> 对象,包含作为页大小设置的行数。因此,(举例来说)方法 
<CODE>previousPage</CODE> 可用在上述代码片断末尾的 <CODE>while</CODE> 
循环中,以从最后一页开始逆向遍历到第一页。方法 <CODE>previousPage</CODE> 也与 <CODE>nextPage</CODE> 
类似,因为它也可以用在 <CODE>while</CODE> 循环中,不同之处在于它是在前面还有页时返回 <CODE>true</CODE>,前面没有页时返回 
<CODE>false</CODE>。 
<P>通过将指针定位于每页最后一行的后面(如以下代码片断所执行的),方法 <CODE>previous</CODE> 
就可以在每页中从最后一行遍历到第一行。代码也可将指针置于每页第一行的前面,然后在 <CODE>while</CODE> 循环中使用 
<CODE>next</CODE> 方法,以在每页中从最第一行遍历到最后一行。 
<P>以下代码片断假定是前一个代码片断的继续,这意味着第十个 <CODE>CachedRowSet</CODE> 
对象的指针位于最后一行。代码将指针移到最后一行的后面,这样第一次调用方法 <CODE>previous</CODE> 
会将指针放回到最后一行上。遍历最后一页(<CODE>CachedRowSet</CODE> 对象 <I>crs</I>)的所有行后,代码接着会进入 
<CODE>while</CODE> 循环以获得第九页、向后遍历各行、转至第八页、向后遍历各行,依此类推,直到第一页的第一行为止。 <PRE>     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
         }
     }
 </PRE>
<P>
<P>
<HR>

<P><!-- =========== FIELD SUMMARY =========== --><A 
name=field_summary><!-- --></A>
<TABLE cellSpacing=0 cellPadding=3 width="100%" summary="" border=1>
  <TBODY>
  <TR class=TableHeadingColor bgColor=#ccccff>
    <TH align=left colSpan=2><FONT size=+2><B>字段摘要</B></FONT></TH></TR>
  <TR class=TableRowColor bgColor=white>
    <TD vAlign=top align=right width="1%"><FONT 
      size=-1><CODE>static&nbsp;boolean</CODE></FONT></TD>
    <TD><CODE><B><A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#COMMIT_ON_ACCEPT_CHANGES">COMMIT_ON_ACCEPT_CHANGES</A></B></CODE> 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;导致在调用 
      <CODE>acceptChanges()</CODE> 时,<CODE>CachedRowSet</CODE> 对象的 
      <CODE>SyncProvider</CODE> 提交更改。</TD></TR></TBODY></TABLE>&nbsp;<A 
name=fields_inherited_from_class_java.sql.ResultSet><!-- --></A> 
<TABLE cellSpacing=0 cellPadding=3 width="100%" summary="" border=1>
  <TBODY>
  <TR class=TableSubHeadingColor bgColor=#eeeeff>
    <TH align=left><B>从接口 java.sql.<A title="java.sql 中的接口" 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html">ResultSet</A> 
      继承的字段</B></TH></TR>
  <TR class=TableRowColor bgColor=white>
    <TD><CODE><A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#CLOSE_CURSORS_AT_COMMIT">CLOSE_CURSORS_AT_COMMIT</A>, 
      <A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#CONCUR_READ_ONLY">CONCUR_READ_ONLY</A>, 
      <A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#CONCUR_UPDATABLE">CONCUR_UPDATABLE</A>, 
      <A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#FETCH_FORWARD">FETCH_FORWARD</A>, 
      <A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#FETCH_REVERSE">FETCH_REVERSE</A>, 
      <A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#FETCH_UNKNOWN">FETCH_UNKNOWN</A>, 
      <A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#HOLD_CURSORS_OVER_COMMIT">HOLD_CURSORS_OVER_COMMIT</A>, 
      <A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#TYPE_FORWARD_ONLY">TYPE_FORWARD_ONLY</A>, 
      <A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#TYPE_SCROLL_INSENSITIVE">TYPE_SCROLL_INSENSITIVE</A>, 
      <A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html#TYPE_SCROLL_SENSITIVE">TYPE_SCROLL_SENSITIVE</A></CODE></TD></TR></TBODY></TABLE>&nbsp; 
<!-- ========== METHOD SUMMARY =========== --><A 
name=method_summary><!-- --></A>
<TABLE cellSpacing=0 cellPadding=3 width="100%" summary="" border=1>
  <TBODY>
  <TR class=TableHeadingColor bgColor=#ccccff>
    <TH align=left colSpan=2><FONT size=+2><B>方法摘要</B></FONT></TH></TR>
  <TR class=TableRowColor bgColor=white>
    <TD vAlign=top align=right width="1%"><FONT 
      size=-1><CODE>&nbsp;void</CODE></FONT></TD>
    <TD><CODE><B><A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#acceptChanges()">acceptChanges</A></B>()</CODE> 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将对此 
      <CODE>CachedRowSet</CODE> 对象所做的行更新、插入以及删除更改传播到底层数据源。</TD></TR>
  <TR class=TableRowColor bgColor=white>
    <TD vAlign=top align=right width="1%"><FONT 
      size=-1><CODE>&nbsp;void</CODE></FONT></TD>
    <TD><CODE><B><A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#acceptChanges(java.sql.Connection)">acceptChanges</A></B>(<A 
      title="java.sql 中的接口" 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/Connection.html">Connection</A>&nbsp;con)</CODE> 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将所有行更新、插入以及删除更改传播到支持此 
      <CODE>CachedRowSet</CODE> 对象的数据源,使用指定的 <CODE>Connection</CODE> 
    对象建立到数据源的连接。</TD></TR>
  <TR class=TableRowColor bgColor=white>
    <TD vAlign=top align=right width="1%"><FONT 
      size=-1><CODE>&nbsp;boolean</CODE></FONT></TD>
    <TD><CODE><B><A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#columnUpdated(int)">columnUpdated</A></B>(int&nbsp;idx)</CODE> 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指示此 
      <CODE>CachedRowSet</CODE> 对象当前行中的指定列是否已更新。</TD></TR>
  <TR class=TableRowColor bgColor=white>
    <TD vAlign=top align=right width="1%"><FONT 
      size=-1><CODE>&nbsp;boolean</CODE></FONT></TD>
    <TD><CODE><B><A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#columnUpdated(java.lang.String)">columnUpdated</A></B>(<A 
      title="java.lang 中的类" 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</A>&nbsp;columnName)</CODE> 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指示此 
      <CODE>CachedRowSet</CODE> 对象当前行中的指定列是否已更新。</TD></TR>
  <TR class=TableRowColor bgColor=white>
    <TD vAlign=top align=right width="1%"><FONT 
      size=-1><CODE>&nbsp;void</CODE></FONT></TD>
    <TD><CODE><B><A 
      href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#commit()">commit</A></B>()</CODE> 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个 
      <CODE>CachedRowSet</CODE> 对象的 <CODE>SyncProvider</CODE> 都包含一个取自 
      <CODE>ResultSet</CODE> 的 <CODE>Connection</CODE> 对象或传递到其构造方法的 JDBC 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -