?? jb4-1-8-4.htm
字號(hào):
<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 允許你建立一個(gè)包含所有DataSet數(shù)據(jù)的Java對(duì)象。同樣,DataSetData對(duì)象可用來為Data Set提供有關(guān)列信息和數(shù)據(jù)。</font></p>
<p><font size="2"> DataSetData對(duì)象實(shí)現(xiàn)java.io.Serializable接口,隨后利用java.io.ObjectOutputStream中的writeObject來串行化,并且利用java.io.ObjectOutputStream中的readObject進(jìn)行讀取。這種方法可以將數(shù)據(jù)轉(zhuǎn)換成字節(jié)數(shù)組,并且通過套件或其他傳輸手段對(duì)其進(jìn)行傳送。另一方面,對(duì)象可以通過直接進(jìn)行串行化工作的Java RMI來進(jìn)行傳輸。</font></p>
<p><font size="2"> 除了在Dataset中保存一組完整的數(shù)據(jù)集以外,你還可以只保存數(shù)據(jù)集的修改。該功能可以實(shí)現(xiàn)一個(gè)中間層服務(wù)器,它與DBMS及能編輯Dataset的外型客戶通信。 <br>
<br>
<font color="#000080"><b>
example using streamable data sets</b></font><br>
<br>
使用流式數(shù)據(jù)集什么時(shí)候使用流式DataSet的例子是在一個(gè)3層系統(tǒng)中,該系統(tǒng)有一個(gè)Java服務(wù)器應(yīng)用程序,它響應(yīng)某數(shù)據(jù)源的數(shù)據(jù)發(fā)出的客戶請(qǐng)求。服務(wù)器可以利用JBuilder 的QueryDataSets或ProdedureDataSets向服務(wù)器提供數(shù)據(jù)。這些數(shù)據(jù)可以利用DataSetData.extractDataSet進(jìn)行提取,并通過連線輸送到客戶端。在客戶端,數(shù)據(jù)可以載入到TableDataSet,并可利用JBuilder的DataSet控件或通過對(duì)DataSet Java API的調(diào)用進(jìn)行編輯。服務(wù)器程序可以刪除它的DataSet中的所有數(shù)據(jù),以便它準(zhǔn)備好隨時(shí)為其他客戶端應(yīng)用程序提供服務(wù)。</font></p>
<p><font size="2"> 當(dāng)位于客戶端應(yīng)用程序上的用戶想要保存修改時(shí),數(shù)據(jù)將被DataSetData.extractDataSetChanges所提取,并送至服務(wù)器。在服務(wù)器載入這些修改之前,它應(yīng)使用DataSet的元數(shù)據(jù)從DBMS中獲取物理列類型。下一步,DataSet連同修改一起被載入,JBuilder中常用的解析器被用來解析數(shù)據(jù)到DBMS。</font></p>
<p><font size="2"> 當(dāng)解析在遠(yuǎn)程服務(wù)器進(jìn)行時(shí), 如果發(fā)生了解析錯(cuò)誤, UI操作可能檢測(cè)不到這些錯(cuò)誤。通過創(chuàng)建一個(gè)錯(cuò)誤DataSet,解析器可以處理這些錯(cuò)誤。對(duì)于發(fā)生的錯(cuò)誤,每個(gè)錯(cuò)誤信息會(huì)用行的INTERNALROW值標(biāo)記。DataSetData將這些錯(cuò)誤傳送到客戶端應(yīng)用程序。如果DataSet還在,那么客戶端應(yīng)用程序能很容易地將這些錯(cuò)誤連接到DataSet中,并且在每行中顯示出錯(cuò)誤內(nèi)容。<br>
<br>
<b><font color="#000080">
使用流式DataSet方法</font></b><br>
<br>
靜態(tài)方法extractDataSet 和extractDataSetChanges將使用非瞬態(tài)專有數(shù)據(jù)成員來填充DataSetData,它指定:</font></p>
<p><font size="2"> 1) 元數(shù)據(jù)信息由以下內(nèi)容構(gòu)成:</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"> 這些屬性當(dāng)前以每種數(shù)據(jù)類型的3個(gè)高位被保存。每種數(shù)據(jù)類型都是一個(gè)字節(jié)。columnCount被隱含存儲(chǔ)為column Names數(shù)組的長(zhǎng)度。 </font></p>
<p><font size="2"> 2) 每行的狀態(tài)位。每行都存儲(chǔ)有一個(gè)short。 </font></p>
<p><font size="2"> 3) 每一數(shù)據(jù)元素都有空位。每一數(shù)據(jù)元素都存儲(chǔ)為2位。使用的可能值為:</font></p>
<p><font size="2"> . 0—Normal data(正常數(shù)據(jù)) <br>
. 1—Assigned Null(分配的空值) <br>
. 2—Unassigned Null(未分配的空值) .<br>
. 3—Unchanged Null(未改變的空值)</font></p>
<p><font size="2"> 最后一個(gè)值只用于extractDataSetChanges。在UPDATED版本中未被改變的數(shù)值以空(null)來保存,為大型二進(jìn)制節(jié)省空間,等等。</font></p>
<p><font size="2"> 4)數(shù)據(jù)本身,組織在一個(gè)列數(shù)據(jù)數(shù)組里。如果數(shù)據(jù)列是Variant.INTEGER類型,此列的數(shù)值將使用一個(gè)int數(shù)組。</font></p>
<p><font size="2"> 5)對(duì)于extractDataSetChanges,一個(gè)特殊的列,INTERNALROW,將添加到數(shù)據(jù)部分中。這個(gè)數(shù)據(jù)列包含長(zhǎng)值,它指明數(shù)據(jù)從中提取的DataSet的interalRow在修改不能應(yīng)用到目標(biāo)DBMS時(shí),數(shù)據(jù)列可以用來作錯(cuò)誤報(bào)告。LoadDat aSet方法將數(shù)據(jù)載入到DataSet。任何在DataSet中不存在的列都會(huì)被添加。請(qǐng)注意物理類型和類似于sqlType,pre cision和scale這樣的屬性,并未包含在DataSetData對(duì)象中。這些屬性必須直接從DBMS上找到。然而這些屬性對(duì)于編輯目標(biāo)來說并不是必要的。特殊列INTERNALROW與其它列一樣出現(xiàn)在數(shù)據(jù)集中。</font></p>
</BODY>
</HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -