成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

使用WebRowSet完成JDBC的大部分任務(wù)

瀏覽:199日期:2024-06-05 18:18:22
內(nèi)容: 任何現(xiàn)實(shí)世界中的企業(yè)級(jí)應(yīng)用都需要訪問持久化存儲(chǔ)。關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)是使用最廣泛的持久化存儲(chǔ)機(jī)制,它支持使用SQL進(jìn)行數(shù)據(jù)查詢和更新。JDBC(Java DataBase Connectivity)是一系列的API,這些API為Java程序提供了一個(gè)使用SQL查詢和更新RDBMS的框架。通過Java程序從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)或者更新數(shù)據(jù)庫(kù)的過程包含了多個(gè)步驟。首先,程序需要建立一個(gè)連接,它可以和目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行通信。我們可以通過幾種不同的方法建立數(shù)據(jù)庫(kù)連接。傳統(tǒng)的方式是,Java程序在裝載了制造商提供的JDBC驅(qū)動(dòng)后,調(diào)用java.sql.DriverManager類中適當(dāng)?shù)膅etConnection()方法獲得連接。另外一個(gè)(也是首選的)方式是,使用制造商提供的實(shí)現(xiàn)或者編寫一個(gè)針對(duì)目標(biāo)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)了javax.sql.Connection接口的自定義類進(jìn)行連接對(duì)象的初始化。在更多的受約束環(huán)境中,例如Java EE容器,提供了使用JNDI(Java Naming and Directory Interface)查找獲得數(shù)據(jù)庫(kù)連接的方式。無論程序使用哪一種方式建立數(shù)據(jù)庫(kù)連接,如果連接成功,它應(yīng)該有一個(gè)對(duì)java.sql.Connection接口實(shí)例的引用。通過連接,程序創(chuàng)建一個(gè)java.sql.Statement實(shí)例,或者一個(gè)包含數(shù)據(jù)庫(kù)查詢的子接口。最后,程序執(zhí)行這個(gè)語句,獲得一個(gè)java.sql.ResultSet實(shí)例,它表示從數(shù)據(jù)庫(kù)中獲得的滿足查詢的實(shí)際數(shù)據(jù)。在寫這篇文章時(shí),JDK5.0是支持JDBC3.0的Java最新版本。JDBC3.0提供了一些特征,增加了數(shù)據(jù)操作和轉(zhuǎn)換的易用性和適應(yīng)性。在這篇文章中,我首先將簡(jiǎn)要解釋它的繼承層次結(jié)構(gòu),緊接著,我會(huì)使用一個(gè)例子演示如何利用javax.sql.rowset.WebRowSet接口的特征非常容易地將數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)化為XML文件,或者相反操作。然后我會(huì)討論這個(gè)接口的利弊。在以上解釋的基礎(chǔ)上,我會(huì)總結(jié)一些首選這個(gè)接口的情況。版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必保留以下作者信息和鏈接作者:Sharad Acharya;mydeman原文:http://www.onjava.com/pub/a/onjava/2006/06/21/making-most-of-jdbc-with-webrowset.htmlMatrix:http://www.matrix.org.cn/resource/article/44/44626_WebRowSet.html關(guān)鍵字:WebRowSet;JDBCWebRowSet層次結(jié)構(gòu)我們開始先對(duì)WebRowSet接口的繼承層次結(jié)構(gòu)作一個(gè)簡(jiǎn)要的解釋。圖1顯示了相關(guān)的Java元素(包、接口和類),它們也是討論的一部分。 圖1 WebRowSet的繼承層次結(jié)構(gòu)繼承層次結(jié)構(gòu)的根部是java.sql.ResultSet接口。這個(gè)接口的實(shí)例代表表格式的數(shù)據(jù),這些數(shù)據(jù)通過執(zhí)行包含對(duì)底層數(shù)據(jù)庫(kù)查詢的java.sql.Statement獲取。默認(rèn)的結(jié)果集只能前向遍歷,并且不能更新。你不可能通過遍歷默認(rèn)結(jié)果集的方式進(jìn)行精確的控制。那么,你有哪些選擇呢?這就依賴于你要對(duì)結(jié)果集進(jìn)行什么操作。例如,如果你想結(jié)果集支持適合于JavaBeans組件模型的JDBC API,就需要使用java.sql.ResultSet的子接口javax.sql.RowSet。因?yàn)镴ava程序訪問數(shù)據(jù)庫(kù)是一個(gè)重量級(jí)操作,所以內(nèi)存中的數(shù)據(jù)高速緩存就是一個(gè)關(guān)系應(yīng)用程序性能的關(guān)鍵因素。如果你想結(jié)果集作為一個(gè)行數(shù)據(jù)的容器緩存在內(nèi)存中,那么你可以使用javax.sql.rowset.CachedRowSet,它是javax.sql.RowSet的子接口。這個(gè)接口的實(shí)例提供了不用一直保持連接數(shù)據(jù)源而操作數(shù)據(jù)的能力。更進(jìn)一步,它是可滾動(dòng)、可更新和可序列化的。除數(shù)據(jù)庫(kù)以外,它可以對(duì)其它表格式結(jié)構(gòu)的數(shù)據(jù)源起作用,如電子數(shù)據(jù)表。如果除了迄今為止提到的所有特征,你還要將結(jié)果集輸出到XML和使用有效的XML作為輸入,請(qǐng)選擇javax.sql.rowset.WebRowSet.。在Sun的參考實(shí)現(xiàn)類中已經(jīng)提供了它的實(shí)例的一個(gè)實(shí)現(xiàn),com.sun.rowset.WebRowSetImpl,并作為JDK5.0的一部分發(fā)行。在層次結(jié)構(gòu)的底部是javax.sql.rowset.JoinRowSet,javax.sql.rowset.WebRowSet的子接口,它提供了聯(lián)合多個(gè)相關(guān)結(jié)果集對(duì)象的方式,就像對(duì)底層數(shù)據(jù)庫(kù)表構(gòu)造的SQL JOIN。使用簡(jiǎn)單結(jié)果集伴隨上面的介紹給你留下的印象,我向你展示一個(gè)簡(jiǎn)單的例子。這篇文章的所有例子開發(fā)環(huán)境都是Eclipse3.1.0,JDK5.0、Windows XP上的Oracle10.2。示例代碼和輸出文件參見資源部分。我們考慮一個(gè)簡(jiǎn)單的student表,它定義了四列來存儲(chǔ)信息。接下來的表格顯示了查詢?cè)摫慝@得的結(jié)果。SQL>select * from student;ID FNAME LNAME AGE200 Jack Dakota 21100 John Doe 26首先,我們編寫一個(gè)Java類,它連接到包含student表的數(shù)據(jù)庫(kù),并且獲取它的紀(jì)錄。public class DatasourceConnector { public static void main(String[] args) { Connection con =null; OracleDataSource ds =null; try { ds = new OracleDataSource(); ds.setUser(''); ds.setPassword(''); ds.setURL( 'jdbc:oracle:thin:@localhost:1521:'); } catch (SQLException e) { e.printStackTrace(); } try { con = ds.getConnection(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( 'select * from student '); for (int j=0; jjavac DatasourceConnector.java>java DatasourceConnector應(yīng)該一切正常,你應(yīng)該可以看到類似下面的結(jié)果:ID FNAME LNAME AGE200 Jack Dakota 21100 John Doe 26導(dǎo)出結(jié)果集現(xiàn)在我把這個(gè)例子更進(jìn)一步,假定這個(gè)程序是一個(gè)應(yīng)用的一部分,應(yīng)用要求數(shù)據(jù)從數(shù)據(jù)庫(kù)轉(zhuǎn)化為XML以進(jìn)行更進(jìn)一步地處理。我將使用實(shí)現(xiàn)類com.sun.rowset.WebRowSetImpl來完成這個(gè)任務(wù)。為了實(shí)際看到這個(gè)結(jié)果,我加入一些代碼構(gòu)造一個(gè)javax.sql.rowset.WebRowSet的實(shí)例,并且導(dǎo)出結(jié)果集到XML文件。如下所示:... ... ... ResultSet rs = stmt.executeQuery('select * from student');WebRowSet wrs = new WebRowSetImpl();wrs.populate(rs);try { wrs.writeXml( new FileOutputStream('student.xml'));} catch (FileNotFoundException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();}... ... ...從wrs.writeXML()輸出的結(jié)果形成一個(gè)符合WebRowSet schema定義的XML文檔。它包含了三部分:屬性、元數(shù)據(jù)和數(shù)據(jù)。大致的布局如下所示,完整的輸出文件參見資源部分。<?xml version='1.0'?> < properties> ... ... ... ... ... ... ... ... ... 標(biāo)簽提供了同步提供者的細(xì)節(jié),例如隔離級(jí)別(isolation level)、RowSet類型等等。標(biāo)簽提供了底層數(shù)據(jù)庫(kù)表的信息,例如紀(jì)錄數(shù)、名稱和列的類型等等。標(biāo)簽包含了實(shí)際數(shù)據(jù),上面的表如下所示: 200 < /columnValue> Jack Dakota 21 100 John Doe 26 上例中的標(biāo)簽顯示了WebRowSet對(duì)象值,當(dāng)前可以不用任何更改地映射到底層數(shù)據(jù)源中。任何數(shù)據(jù)處理操作如插入、更新或刪除都可以在輸出的XML中被恰當(dāng)?shù)臉?biāo)記出來,我將會(huì)在接下來的部分解釋。操作結(jié)果集你可以刪除一行數(shù)據(jù),先移動(dòng)指針到這一行的位置上,然后調(diào)用WebRowSet實(shí)例的deleteRow()方法。同樣,你可以更新一個(gè)或者多個(gè)值,先移動(dòng)指針到這個(gè)行的位置,然后調(diào)用合適的更新方法。下面的代碼同時(shí)完成了刪除和更新:... ... ...ResultSet rs = stmt.executeQuery('select * from student ');WebRowSet wrs = new WebRowSetImpl();wrs.populate(rs);wrs.absolute(1); //move to first rowwrs.deleteRow(); //delete current rowwrs.absolute(2); //move to second rowwrs.updateInt(4,20);//update current row... ... ...前四行代碼片斷的作用是很明顯的:初始化對(duì)象并且轉(zhuǎn)化結(jié)果集。接下來的兩行嘗試刪除第一行。最后兩行試圖把第二行紀(jì)錄的第四列的值更新為20。輸出這個(gè)WebRowSet對(duì)象會(huì)產(chǎn)生如下的元素: 200 Jack Dakota 21 100 John Doe 26 20 這個(gè)XML片斷顯示了第一行被標(biāo)簽標(biāo)記為刪除。第二行第四列的值被標(biāo)記出從當(dāng)前值26更新為一個(gè)新值20。提交更改迄今為止,我僅僅是操作結(jié)果。這些變化并不會(huì)反映到底層的數(shù)據(jù)庫(kù)中,除非我進(jìn)行了提交。下面代碼,如果執(zhí)行成功,將會(huì)通過提交是改變持久。... ... ...wrs.acceptChanges();... ... ...從XML讀取WebRowSet也提供了一些readXML()方法,通過使用java.io.InputStream或者java.io.Reader實(shí)例從有效的XML文件中讀取數(shù)據(jù)。如果你的輸入數(shù)據(jù)是有效的XML形式,在進(jìn)行其他處理之前需要將它們持久化到底層的數(shù)據(jù)庫(kù)中,你就會(huì)發(fā)現(xiàn)這個(gè)選項(xiàng)非常有用。使用WebRowSet的利弊在展示了WebRowSet的基礎(chǔ)操作之后,我們總結(jié)以下使用這種方式操作數(shù)據(jù)的利弊。利+標(biāo)準(zhǔn)方案使它從不同的應(yīng)用中生成和處理XML數(shù)據(jù)而不需要轉(zhuǎn)化成為可能。+數(shù)據(jù)操作的易用性——它支持滾動(dòng)、更新、緩存和離線編輯。+數(shù)據(jù)和XML簡(jiǎn)單轉(zhuǎn)化使相關(guān)代碼減少。較少的代碼意味著較少的錯(cuò)誤,也就意味著更加健壯的代碼。+較少的數(shù)據(jù)庫(kù)更新可以幫助減少并發(fā)問題。弊+性能和吞吐量可能會(huì)因?yàn)楦郊拥男畔⑷鐚傩院驮獢?shù)據(jù)受到負(fù)面影響。在分布式應(yīng)用中這可能是一個(gè)尤為突出的問題,因?yàn)榫薮蟮腦ML文件需要在網(wǎng)絡(luò)上傳輸以充分減少數(shù)據(jù)的數(shù)量。+新的JDK版本,因?yàn)檫@個(gè)特征在1.4或者更老一些的JDK上并不可用。適用性WebRowSet接口適合在下面情形中使用:1、使用XML消息的應(yīng)用集成,XML消息是當(dāng)前頂級(jí)架構(gòu)的選擇之一。Java EE應(yīng)用可以使用基于JMS的集成和其他外部通信,而使用JDBC保存自己的事務(wù)狀態(tài)。在這樣一個(gè)情形下,WebRowSet API減少了編程的復(fù)雜性,也降低需要編寫的代碼量。2、來自持久性數(shù)據(jù)源的內(nèi)容展示通常通過獲取數(shù)據(jù)集并把它傳遞到視圖組件(如JSP)中來完成。一個(gè)可用的方式就是在應(yīng)用XSLT之前把數(shù)據(jù)集轉(zhuǎn)化為XML,然后產(chǎn)生展示的內(nèi)容。這種選擇提供了更好的可維護(hù)性,因?yàn)樗鼫p少來自展示內(nèi)容的組件的格式化。總結(jié)直到最近,在數(shù)據(jù)庫(kù)和XML之間來回的數(shù)據(jù)轉(zhuǎn)化請(qǐng)求曾經(jīng)是大部分應(yīng)用開發(fā)和測(cè)試資源中一項(xiàng)主要任務(wù)。幸運(yùn)的是,最新的JDBC API包含了一些特點(diǎn)例如數(shù)據(jù)集的精確導(dǎo)航、數(shù)據(jù)集的高速緩存、把數(shù)據(jù)集寫入到XML中等等。對(duì)于企業(yè)級(jí)程序員RDBMS的重要性以及隨著當(dāng)前不斷增長(zhǎng)的Java和XML應(yīng)用的普及度,像WebRowSet這樣的接口提供的特征將會(huì)更加有用。那么,現(xiàn)在是時(shí)候重新考慮一下了,在下一個(gè)使用RDBMS作為數(shù)據(jù)持久化的Java/XML應(yīng)用中,你是否仍然采用傳統(tǒng)的數(shù)據(jù)訪問方式;WebRowSet也許可以讓你耳目一新。資源Matrix:http://www.matrix.org.cn本文的示例代碼Sun’s WebRowSet API文檔頁面Sharad Acharya在物流、保險(xiǎn)、銀行和抵押等多行業(yè)范圍的軟件工程領(lǐng)域有超過8年的經(jīng)驗(yàn)。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd 任何現(xiàn)實(shí)世界中的企業(yè)級(jí)應(yīng)用都需要訪問持久化存儲(chǔ)。關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)是使用最廣泛的持久化存儲(chǔ)機(jī)制,它支持使用SQL進(jìn)行數(shù)據(jù)查詢和更新。JDBC(Java DataBase Connectivity)是一系列的API,這些API為Java程序提供了一個(gè)使用SQL查詢和更新RDBMS的框架。通過Java程序從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)或者更新數(shù)據(jù)庫(kù)的過程
標(biāo)簽: JDBC
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美激情综合在线| 日本女人一区二区三区| 视频精品一区二区| 国产婷婷精品| 亚洲女与黑人做爰| 亚洲国产精品久久久久婷婷老年 | 免费久久99精品国产自| 亚洲精品水蜜桃| 在线日韩欧美| 国产日韩欧美麻豆| 欧美福利视频| 欧美国产一区二区在线观看| 91免费国产在线观看| 久久综合狠狠综合久久综合88| 国产精品一区二区91| 欧美高清视频不卡网| 韩国三级中文字幕hd久久精品| 欧美网站大全在线观看| 久久精品国产99国产| 欧美三级电影在线看| 精品亚洲成av人在线观看| 欧美日韩日日摸| 狠狠狠色丁香婷婷综合久久五月| 欧美亚男人的天堂| 久久疯狂做爰流白浆xx| 欧美日韩国产经典色站一区二区三区| 捆绑调教美女网站视频一区| 欧美色综合影院| 久久超碰97人人做人人爱| 欧美日韩二区三区| 国产福利不卡视频| 精品不卡在线视频| 午夜精品网站| 国产精品不卡在线| 亚洲欧洲综合| 午夜精品视频一区| 在线免费观看日韩欧美| 精品在线一区二区三区| 欧美一区二区三区免费在线看| 国产精品88av| 精品久久久久久综合日本欧美| 91丨porny丨最新| 国产精品国产三级国产a| 一本色道久久精品| 青草av.久久免费一区| 欧美日本在线播放| 国产成人在线免费| 国产亚洲一区二区三区四区 | 久久精品国产**网站演员| 欧美日韩精品一区视频| 国产传媒日韩欧美成人| 久久精品人人做人人综合 | 精品一区二区综合| 日韩手机在线导航| 欧美连裤袜在线视频| 亚洲欧美成人一区二区三区| 久久精品一本| 国产精品综合久久| 欧美激情综合五月色丁香小说| 一本不卡影院| 九九久久精品视频| 久久久久久久久久久久久夜| 国内精品久久久久久久果冻传媒| 一区二区三区丝袜| 欧美性xxxxxxxx| www.欧美.com| 有坂深雪av一区二区精品| 欧美伊人精品成人久久综合97| 国产成人精品www牛牛影视| 国产精品网站在线播放| 性伦欧美刺激片在线观看| 国产一区三区三区| 中文字幕av一区二区三区高| 老鸭窝91久久精品色噜噜导演| 国产黄色精品网站| 日韩一区欧美一区| 欧美在线观看一二区| 成人av先锋影音| 椎名由奈av一区二区三区| 在线亚洲+欧美+日本专区| 成人黄色一级视频| 亚洲综合免费观看高清完整版在线| 欧美福利一区二区| 伊人蜜桃色噜噜激情综合| 久久精品国产一区二区三| 日本一区二区三区视频视频| 色乱码一区二区三区88| 91在线精品秘密一区二区| 亚洲国产精品人人做人人爽| 欧美tickle裸体挠脚心vk| 国产视频一区三区| 国产91在线观看丝袜| 亚洲丝袜美腿综合| 欧美亚洲愉拍一区二区| 欧美日韩理论| 精品一二线国产| 亚洲色图欧美在线| 在线不卡中文字幕| 国产精品免费一区二区三区观看| 国产精品综合一区二区| 亚洲综合激情网| 精品奇米国产一区二区三区| 亚洲影视在线| 不卡的av在线| 天堂在线一区二区| 欧美经典三级视频一区二区三区| 91成人在线免费观看| 91免费国产在线| 欧美aaaaaa午夜精品| 中文字幕va一区二区三区| 欧美猛男超大videosgay| 在线观看一区| 国产成人精品免费网站| 亚洲成人动漫av| 久久久亚洲精品石原莉奈| 色诱视频网站一区| 国产精品久久| 成人午夜激情视频| 日韩成人免费在线| 亚洲伦理在线精品| 久久久久久久精| 欧美精品在线一区二区| 国产精品一区二区三区四区五区 | 久久婷婷影院| 黑人一区二区| 懂色一区二区三区免费观看| 一个色在线综合| 久久精品人人做人人综合| 91精品国产综合久久蜜臀| 久久精品网址| 国内自拍视频一区二区三区| 国产精品一区二区在线观看不卡| 亚洲成人综合在线| 中文字幕一区二区三区精华液| 日韩精品一区二区三区swag| 在线观看www91| 免费久久久一本精品久久区 | 欧美精品在欧美一区二区少妇| 亚洲一区bb| 亚洲国产精品一区在线观看不卡 | 一本色道88久久加勒比精品| 欧美一区二区三区久久精品茉莉花 | av不卡免费看| 午夜久久福利| 成人a免费在线看| 国产一区二区三区四区五区美女| 丝袜美腿亚洲综合| 亚洲国产成人porn| 亚洲自拍另类综合| 最新高清无码专区| 欧美国产成人精品| 久久久精品免费免费| 日韩免费观看高清完整版| 欧美美女一区二区三区| 欧美三区在线观看| 91久久国产最好的精华液| 免播放器亚洲| 国产精品一区免费观看| 亚洲黄色一区二区三区| 欧美高清不卡| 97久久精品人人做人人爽| 成人午夜av电影| 国产一区二区视频在线| 久草这里只有精品视频| 免费av网站大全久久| 亚洲成人久久影院| 亚洲国产欧美在线| 亚洲五月六月丁香激情| 一区二区三区在线观看欧美| 亚洲乱码精品一二三四区日韩在线| 国产精品国产三级国产aⅴ原创 | 在线观看91视频| 欧洲国内综合视频| 欧美色大人视频| 欧美日韩视频第一区| 欧美日产国产精品| 欧美精品tushy高清| 欧美午夜电影一区| 欧美午夜精品一区二区蜜桃| 日本精品免费观看高清观看| 色婷婷综合久色| 欧美在线观看视频在线| 欧美亚洲综合在线| 欧美性大战久久| 欧美精品tushy高清| 欧美一级黄色录像| 精品噜噜噜噜久久久久久久久试看 | 日本v片在线高清不卡在线观看| 蜜桃视频在线一区| 日韩成人伦理电影在线观看| 久久久www免费人成精品| 午夜av一区二区| 一区二区成人在线观看| 亚洲一区二区三区自拍| 亚洲综合久久av| 五月天丁香久久| 蜜臀久久99精品久久久久宅男| 久久精品国产秦先生| 狠狠色狠狠色合久久伊人| 国产福利一区二区三区在线视频|