📄 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 + -