📄 jb4-1-8-4.htm
字号:
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft FrontPage 4.0">
<TITLE></TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<body bgcolor="#fefef2" style="FONT-SIZE: 9pt">
<P><STRONG><FONT
color=#0080FF size=3 >Using dataSets with RMI
</FONT>
</STRONG>
<hr>
译者名字: stavid(JD019) <br>
邮件地址:<a href="mailto:stavid@163.com">stavid@163.com</a>
<p><font size="2"><br>
Streamable dateset 允许你建立一个包含所有DataSet数据的Java对象。同样,DataSetData对象可用来为Data Set提供有关列信息和数据。</font></p>
<p><font size="2"> DataSetData对象实现java.io.Serializable接口,随后利用java.io.ObjectOutputStream中的writeObject来串行化,并且利用java.io.ObjectOutputStream中的readObject进行读取。这种方法可以将数据转换成字节数组,并且通过套件或其他传输手段对其进行传送。另一方面,对象可以通过直接进行串行化工作的Java RMI来进行传输。</font></p>
<p><font size="2"> 除了在Dataset中保存一组完整的数据集以外,你还可以只保存数据集的修改。该功能可以实现一个中间层服务器,它与DBMS及能编辑Dataset的外型客户通信。 <br>
<br>
<font color="#000080"><b>
example using streamable data sets</b></font><br>
<br>
使用流式数据集什么时候使用流式DataSet的例子是在一个3层系统中,该系统有一个Java服务器应用程序,它响应某数据源的数据发出的客户请求。服务器可以利用JBuilder 的QueryDataSets或ProdedureDataSets向服务器提供数据。这些数据可以利用DataSetData.extractDataSet进行提取,并通过连线输送到客户端。在客户端,数据可以载入到TableDataSet,并可利用JBuilder的DataSet控件或通过对DataSet Java API的调用进行编辑。服务器程序可以删除它的DataSet中的所有数据,以便它准备好随时为其他客户端应用程序提供服务。</font></p>
<p><font size="2"> 当位于客户端应用程序上的用户想要保存修改时,数据将被DataSetData.extractDataSetChanges所提取,并送至服务器。在服务器载入这些修改之前,它应使用DataSet的元数据从DBMS中获取物理列类型。下一步,DataSet连同修改一起被载入,JBuilder中常用的解析器被用来解析数据到DBMS。</font></p>
<p><font size="2"> 当解析在远程服务器进行时, 如果发生了解析错误, UI操作可能检测不到这些错误。通过创建一个错误DataSet,解析器可以处理这些错误。对于发生的错误,每个错误信息会用行的INTERNALROW值标记。DataSetData将这些错误传送到客户端应用程序。如果DataSet还在,那么客户端应用程序能很容易地将这些错误连接到DataSet中,并且在每行中显示出错误内容。<br>
<br>
<b><font color="#000080">
使用流式DataSet方法</font></b><br>
<br>
静态方法extractDataSet 和extractDataSetChanges将使用非瞬态专有数据成员来填充DataSetData,它指定:</font></p>
<p><font size="2"> 1) 元数据信息由以下内容构成:</font></p>
<p><font size="2">
. columnCount <br>
. rowCount <br>
. columnNames <br>
. dataTy p e s<br>
. rowId,hidden,internalRow(列属性) </font></p>
<p><font size="2"> 这些属性当前以每种数据类型的3个高位被保存。每种数据类型都是一个字节。columnCount被隐含存储为column Names数组的长度。 </font></p>
<p><font size="2"> 2) 每行的状态位。每行都存储有一个short。 </font></p>
<p><font size="2"> 3) 每一数据元素都有空位。每一数据元素都存储为2位。使用的可能值为:</font></p>
<p><font size="2"> . 0—Normal data(正常数据) <br>
. 1—Assigned Null(分配的空值) <br>
. 2—Unassigned Null(未分配的空值) .<br>
. 3—Unchanged Null(未改变的空值)</font></p>
<p><font size="2"> 最后一个值只用于extractDataSetChanges。在UPDATED版本中未被改变的数值以空(null)来保存,为大型二进制节省空间,等等。</font></p>
<p><font size="2"> 4)数据本身,组织在一个列数据数组里。如果数据列是Variant.INTEGER类型,此列的数值将使用一个int数组。</font></p>
<p><font size="2"> 5)对于extractDataSetChanges,一个特殊的列,INTERNALROW,将添加到数据部分中。这个数据列包含长值,它指明数据从中提取的DataSet的interalRow在修改不能应用到目标DBMS时,数据列可以用来作错误报告。LoadDat aSet方法将数据载入到DataSet。任何在DataSet中不存在的列都会被添加。请注意物理类型和类似于sqlType,pre cision和scale这样的属性,并未包含在DataSetData对象中。这些属性必须直接从DBMS上找到。然而这些属性对于编辑目标来说并不是必要的。特殊列INTERNALROW与其它列一样出现在数据集中。</font></p>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -