?? cachedrowset.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0085)http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html -->
<!--NewPage--><HTML><HEAD><TITLE>CachedRowSet (Java 2 Platform SE 5.0)</TITLE><!-- Generated by javadoc (build 1.5.0_03) on Thu Jun 22 12:47:57 CST 2006 -->
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="javax.sql.rowset.CachedRowSet interface" name=keywords><LINK
title=Style href="CachedRowSet.files/stylesheet.css" type=text/css
rel=stylesheet>
<SCRIPT type=text/javascript>function windowTitle(){ parent.document.title="CachedRowSet (Java 2 Platform SE 5.0)";}</SCRIPT>
<NOSCRIPT></NOSCRIPT>
<META content="MSHTML 6.00.2900.3059" name=GENERATOR></HEAD>
<BODY bgColor=white onload=windowTitle();><!-- ========= START OF TOP NAVBAR ======= --><A
name=navbar_top><!-- --></A><A title=跳過導航鏈接
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#skip-navbar_top"></A>
<TABLE cellSpacing=0 cellPadding=1 width="100%" summary="" border=0>
<TBODY>
<TR>
<TD class=NavBarCell1 bgColor=#eeeeff colSpan=2><A
name=navbar_top_firstrow><!-- --></A>
<TABLE cellSpacing=3 cellPadding=0 summary="" border=0>
<TBODY>
<TR vAlign=top align=middle>
<TD class=NavBarCell1 bgColor=#eeeeff><A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/overview-summary.html"><FONT
class=NavBarFont1><B>概述</B></FONT></A> </TD>
<TD class=NavBarCell1 bgColor=#eeeeff><A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/package-summary.html"><FONT
class=NavBarFont1><B>軟件包</B></FONT></A> </TD>
<TD class=NavBarCell1Rev bgColor=#ffffff> <FONT
class=NavBarFont1Rev><B>類</B></FONT> </TD>
<TD class=NavBarCell1 bgColor=#eeeeff><A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/class-use/CachedRowSet.html"><FONT
class=NavBarFont1><B>使用</B></FONT></A> </TD>
<TD class=NavBarCell1 bgColor=#eeeeff><A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/package-tree.html"><FONT
class=NavBarFont1><B>樹</B></FONT></A> </TD>
<TD class=NavBarCell1 bgColor=#eeeeff><A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/deprecated-list.html"><FONT
class=NavBarFont1><B>已過時</B></FONT></A> </TD>
<TD class=NavBarCell1 bgColor=#eeeeff><A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/index-files/index-1.html"><FONT
class=NavBarFont1><B>索引</B></FONT></A> </TD>
<TD class=NavBarCell1 bgColor=#eeeeff><A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/help-doc.html"><FONT
class=NavBarFont1><B>幫助</B></FONT></A> </TD></TR></TBODY></TABLE></TD>
<TD vAlign=top align=right rowSpan=3><EM><B>Java<SUP><FONT
size=-2>TM</FONT></SUP> 2 Platform<BR>Standard Ed.
5.0</B></EM> </TD></TR>
<TR>
<TD class=NavBarCell2 bgColor=white><FONT size=-2> <A
title="javax.sql.rowset 中的類"
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/BaseRowSet.html"><B>上一個類</B></A>
<A title="javax.sql.rowset 中的接口"
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/FilteredRowSet.html"><B>下一個類</B></A></FONT></TD>
<TD class=NavBarCell2 bgColor=white><FONT size=-2><A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/index.html?javax/sql/rowset/CachedRowSet.html"
target=_top><B>框架</B></A> <A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html"
target=_top><B>無框架</B></A>
<SCRIPT type=text/javascript> <!-- if(window==top) { document.writeln('<A HREF="../../../allclasses-noframe.html"><B>所有類</B></A>'); } //--></SCRIPT>
<NOSCRIPT><A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/allclasses-noframe.html"><B>所有類</B></A>
</NOSCRIPT></FONT></TD></TR>
<TR>
<TD class=NavBarCell3 vAlign=top><FONT size=-2>摘要: 嵌套 | <A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#field_summary">字段</A> | 構造方法 | <A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#method_summary">方法</A></FONT></TD>
<TD class=NavBarCell3 vAlign=top><FONT size=-2>詳細信息: <A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#field_detail">字段</A> | 構造方法 | <A
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/CachedRowSet.html#method_detail">方法</A></FONT></TD></TR></TBODY></TABLE><A
name=skip-navbar_top></A><!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2><FONT size=-1>javax.sql.rowset</FONT> <BR>接口 CachedRowSet</H2>
<DL>
<DT><B>所有超級接口:</B>
<DD><A title="javax.sql.rowset 中的接口"
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/Joinable.html">Joinable</A>,
<A title="java.sql 中的接口"
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html">ResultSet</A>,
<A title="javax.sql 中的接口"
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/RowSet.html">RowSet</A>
</DD></DL>
<DL>
<DT><B>所有已知子接口:</B>
<DD><A title="javax.sql.rowset 中的接口"
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/FilteredRowSet.html">FilteredRowSet</A>,
<A title="javax.sql.rowset 中的接口"
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/JoinRowSet.html">JoinRowSet</A>,
<A title="javax.sql.rowset 中的接口"
href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/WebRowSet.html">WebRowSet</A>
</DD></DL>
<HR>
<DL>
<DT><PRE>public interface <B>CachedRowSet</B><DT>extends <A title="javax.sql 中的接口" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/RowSet.html">RowSet</A>, <A title="javax.sql.rowset 中的接口" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/sql/rowset/Joinable.html">Joinable</A></DT></PRE></DT></DL><PRE></PRE>
<P>所有標準 <CODE>CachedRowSet</CODE> 實現都必須實現的接口。
<P>Sun Microsystems 提供的 <CODE>CachedRowSet</CODE>
接口的參考實現是一個標準實現。開發人員可以按原樣使用此實現、可以擴展它,也可以選擇自己編寫此接口的實現。
<P><CODE>CachedRowSet</CODE> 對象是一個數據行的容器,可在內存中緩存其各行,這使得進行操作時無需總是連接到數據源。此外,它還是一個
JavaBeans<SUP><FONT size=-2>TM</FONT></SUP>
組件,是可滾動、可更新、可序列化的。<CODE>CachedRowSet</CODE>
對象通常包含結果集中的行,但它也可以包含任何具有表格式的文件(如電子表格)中的行。參考實現只支持從 <CODE>ResultSet</CODE>
對象中獲取數據,但是開發人員可以擴展 <CODE>SyncProvider</CODE> 實現,以提供對其他表格數據源的訪問。
<P>應用程序可以修改 <CODE>CachedRowSet</CODE> 對象中的數據,這些修改隨后可以被傳播回數據源。
<P><CODE>CachedRowSet</CODE> 對象是一個<I>非連接</I>
rowset,這意味著它只會短暫地連接其數據源。連接數據源發生在讀取數據以用各行填充自身,以及將更改傳播回其底層數據源時。其余時間
<CODE>CachedRowSet</CODE> 對象是非連接的,包括修改它的數據時。非連接使 <CODE>RowSet</CODE>
對象更為簡潔,因此更容易傳遞給另一個組件。例如,非連接 <CODE>RowSet</CODE> 對象可以被序列化并通過導線傳遞到瘦客戶端 (thin
client),如個人數字助理(personal digital assistant,PDA)。
<P>
<H3>1.0 創建 <CODE>CachedRowSet</CODE> 對象</H3>以下代碼行使用參考實現 (RI) 中提供的默認
<CODE>CachedRowSet</CODE> 構造方法來創建默認的 <CODE>CachedRowSet</CODE> 對象。 <PRE> CachedRowSetImpl crs = new CachedRowSetImpl();
</PRE>這一新 <CODE>CachedRowSet</CODE> 對象的屬性設置為 <CODE>BaseRowSet</CODE>
對象的默認屬性,此外,它將 <CODE>RIOptimisticProvider</CODE>
對象作為其同步提供程序。<CODE>RIOptimisticProvider</CODE>(RI 中包含的兩個
<CODE>SyncProvider</CODE> 實現之一)是在沒有指定同步提供程序時,<CODE>SyncFactory</CODE> 單件
(singleton) 將提供的默認提供程序。
<P><CODE>SyncProvider</CODE> 對象提供了帶有 reader 的(<CODE>RowSetReader</CODE> 對象)的
<CODE>CachedRowSet</CODE> 對象,用于從數據源讀取數據以便用該數據填充自身。可以實現 reader 從
<CODE>ResultSet</CODE> 對象或者表格式的文件中讀取數據。<CODE>SyncProvider</CODE> 對象還提供了
writer(<CODE>RowSetWriter</CODE> 對象),用于同步在與底層數據源中的數據斷開連接時對
<CODE>CachedRowSet</CODE> 對象數據所做的任何更改。
<P>可以實現 writer 以在檢查和避免沖突方面實施不同程度的關注。(如果使用某個值填充 rowset
后更改了數據源中的該值,則會發生沖突。)<CODE>RIOptimisticProvider</CODE>
實現假定沖突很少或沒有沖突,因此不設置鎖定。僅在沒有沖突時,它才使用取自 <CODE>CachedRowSet</CODE> 對象的值更新數據源。也可以實現其他
writer,使其始終可將修改后的數據寫入數據源,這可以通過不檢查沖突來實現,或者從另一個方面著手,即通過設置足夠的鎖定來防止對數據源中的數據進行更改。這兩種
writer 之間還可以有其他 writer 實現。
<P><CODE>CachedRowSet</CODE> 對象可以使用任何已向 <CODE>SyncFactory</CODE> 單件注冊的
<CODE>SyncProvider</CODE> 實現。通過調用以下代碼行,應用程序可以找到已注冊的 <CODE>SyncProvider</CODE>
實現。 <PRE> java.util.Enumeration providers = SyncFactory.getRegisteredProviders();
</PRE>
<P><CODE>CachedRowSet</CODE> 對象可使用兩種方式來指定它將使用的 <CODE>SyncProvider</CODE> 對象。
<UL) <LI>向構造方法提供實現名<BR>以下代碼行創建 <CODE>CachedRowSet</CODE> 對象
<I>crs2</I>,使用默認值初始化該對象,但其 <CODE>SyncProvider</CODE> 對象是指定的。 <PRE> CachedRowSetImpl crs2 = new CachedRowSetImpl(
"com.fred.providers.HighAvailabilityProvider");
</PRE>
<LI>使用 <CODE>CachedRowSet</CODE> 方法 <CODE>setSyncProvider</CODE> 設置
<CODE>SyncProvider</CODE><BR>以下代碼行為 <I>crs</I> 重置 <CODE>SyncProvider</CODE> 對象,該
<CODE>CachedRowSet</CODE> 對象是使用默認構造方法創建的。 <PRE> crs.setSyncProvider("com.fred.providers.HighAvailabilityProvider");
</PRE></UL) <code 有關更多細節,請參閱>SyncFactory</CODE> 和
<CODE>SyncProvider</CODE> 的注釋。
<P>
<H3>2.0 從 <CODE>CachedRowSet</CODE> 對象檢索數據</H3>從 <CODE>CachedRowSet</CODE>
對象檢索數據可使用繼承自 <CODE>ResultSet</CODE> 接口的獲取方法。以下示例(其中 <CODE>crs</CODE> 是一個
<CODE>CachedRowSet</CODE>
對象)演示了如何在各行中進行迭代,檢索每行中的列值。第一個示例使用以列號為參數的獲取方法;第二個示例使用以列名為參數的獲取方法。當
<CODE>RowSet</CODE> 對象的命令是 <CODE>SELECT * FROM TABLENAME</CODE>
形式時通常使用列號;當命令通過名稱指定列時則通常使用列名。 <PRE> 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);
}
</PRE><PRE> while (crs.next()) {
String name = crs.getString("NAME");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -