日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

使用WebRowSet完成JDBC的大部分任務

瀏覽:227日期:2024-06-05 18:18:22
內容: 任何現實世界中的企業級應用都需要訪問持久化存儲。關系型數據庫管理系統(RDBMS)是使用最廣泛的持久化存儲機制,它支持使用SQL進行數據查詢和更新。JDBC(Java DataBase Connectivity)是一系列的API,這些API為Java程序提供了一個使用SQL查詢和更新RDBMS的框架。通過Java程序從數據庫中獲取數據或者更新數據庫的過程包含了多個步驟。首先,程序需要建立一個連接,它可以和目標數據庫進行通信。我們可以通過幾種不同的方法建立數據庫連接。傳統的方式是,Java程序在裝載了制造商提供的JDBC驅動后,調用java.sql.DriverManager類中適當的getConnection()方法獲得連接。另外一個(也是首選的)方式是,使用制造商提供的實現或者編寫一個針對目標數據庫的實現了javax.sql.Connection接口的自定義類進行連接對象的初始化。在更多的受約束環境中,例如Java EE容器,提供了使用JNDI(Java Naming and Directory Interface)查找獲得數據庫連接的方式。無論程序使用哪一種方式建立數據庫連接,如果連接成功,它應該有一個對java.sql.Connection接口實例的引用。通過連接,程序創建一個java.sql.Statement實例,或者一個包含數據庫查詢的子接口。最后,程序執行這個語句,獲得一個java.sql.ResultSet實例,它表示從數據庫中獲得的滿足查詢的實際數據。在寫這篇文章時,JDK5.0是支持JDBC3.0的Java最新版本。JDBC3.0提供了一些特征,增加了數據操作和轉換的易用性和適應性。在這篇文章中,我首先將簡要解釋它的繼承層次結構,緊接著,我會使用一個例子演示如何利用javax.sql.rowset.WebRowSet接口的特征非常容易地將數據庫中的數據轉化為XML文件,或者相反操作。然后我會討論這個接口的利弊。在以上解釋的基礎上,我會總結一些首選這個接口的情況。版權聲明:任何獲得Matrix授權的網站,轉載時請務必保留以下作者信息和鏈接作者: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關鍵字:WebRowSet;JDBCWebRowSet層次結構我們開始先對WebRowSet接口的繼承層次結構作一個簡要的解釋。圖1顯示了相關的Java元素(包、接口和類),它們也是討論的一部分。 圖1 WebRowSet的繼承層次結構繼承層次結構的根部是java.sql.ResultSet接口。這個接口的實例代表表格式的數據,這些數據通過執行包含對底層數據庫查詢的java.sql.Statement獲取。默認的結果集只能前向遍歷,并且不能更新。你不可能通過遍歷默認結果集的方式進行精確的控制。那么,你有哪些選擇呢?這就依賴于你要對結果集進行什么操作。例如,如果你想結果集支持適合于JavaBeans組件模型的JDBC API,就需要使用java.sql.ResultSet的子接口javax.sql.RowSet。因為Java程序訪問數據庫是一個重量級操作,所以內存中的數據高速緩存就是一個關系應用程序性能的關鍵因素。如果你想結果集作為一個行數據的容器緩存在內存中,那么你可以使用javax.sql.rowset.CachedRowSet,它是javax.sql.RowSet的子接口。這個接口的實例提供了不用一直保持連接數據源而操作數據的能力。更進一步,它是可滾動、可更新和可序列化的。除數據庫以外,它可以對其它表格式結構的數據源起作用,如電子數據表。如果除了迄今為止提到的所有特征,你還要將結果集輸出到XML和使用有效的XML作為輸入,請選擇javax.sql.rowset.WebRowSet.。在Sun的參考實現類中已經提供了它的實例的一個實現,com.sun.rowset.WebRowSetImpl,并作為JDK5.0的一部分發行。在層次結構的底部是javax.sql.rowset.JoinRowSet,javax.sql.rowset.WebRowSet的子接口,它提供了聯合多個相關結果集對象的方式,就像對底層數據庫表構造的SQL JOIN。使用簡單結果集伴隨上面的介紹給你留下的印象,我向你展示一個簡單的例子。這篇文章的所有例子開發環境都是Eclipse3.1.0,JDK5.0、Windows XP上的Oracle10.2。示例代碼和輸出文件參見資源部分。我們考慮一個簡單的student表,它定義了四列來存儲信息。接下來的表格顯示了查詢該表獲得的結果。SQL>select * from student;ID FNAME LNAME AGE200 Jack Dakota 21100 John Doe 26首先,我們編寫一個Java類,它連接到包含student表的數據庫,并且獲取它的紀錄。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應該一切正常,你應該可以看到類似下面的結果:ID FNAME LNAME AGE200 Jack Dakota 21100 John Doe 26導出結果集現在我把這個例子更進一步,假定這個程序是一個應用的一部分,應用要求數據從數據庫轉化為XML以進行更進一步地處理。我將使用實現類com.sun.rowset.WebRowSetImpl來完成這個任務。為了實際看到這個結果,我加入一些代碼構造一個javax.sql.rowset.WebRowSet的實例,并且導出結果集到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()輸出的結果形成一個符合WebRowSet schema定義的XML文檔。它包含了三部分:屬性、元數據和數據。大致的布局如下所示,完整的輸出文件參見資源部分。<?xml version='1.0'?> < properties> ... ... ... ... ... ... ... ... ... 標簽提供了同步提供者的細節,例如隔離級別(isolation level)、RowSet類型等等。標簽提供了底層數據庫表的信息,例如紀錄數、名稱和列的類型等等。標簽包含了實際數據,上面的表如下所示: 200 < /columnValue> Jack Dakota 21 100 John Doe 26 上例中的標簽顯示了WebRowSet對象值,當前可以不用任何更改地映射到底層數據源中。任何數據處理操作如插入、更新或刪除都可以在輸出的XML中被恰當的標記出來,我將會在接下來的部分解釋。操作結果集你可以刪除一行數據,先移動指針到這一行的位置上,然后調用WebRowSet實例的deleteRow()方法。同樣,你可以更新一個或者多個值,先移動指針到這個行的位置,然后調用合適的更新方法。下面的代碼同時完成了刪除和更新:... ... ...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... ... ...前四行代碼片斷的作用是很明顯的:初始化對象并且轉化結果集。接下來的兩行嘗試刪除第一行。最后兩行試圖把第二行紀錄的第四列的值更新為20。輸出這個WebRowSet對象會產生如下的元素: 200 Jack Dakota 21 100 John Doe 26 20 這個XML片斷顯示了第一行被標簽標記為刪除。第二行第四列的值被標記出從當前值26更新為一個新值20。提交更改迄今為止,我僅僅是操作結果。這些變化并不會反映到底層的數據庫中,除非我進行了提交。下面代碼,如果執行成功,將會通過提交是改變持久。... ... ...wrs.acceptChanges();... ... ...從XML讀取WebRowSet也提供了一些readXML()方法,通過使用java.io.InputStream或者java.io.Reader實例從有效的XML文件中讀取數據。如果你的輸入數據是有效的XML形式,在進行其他處理之前需要將它們持久化到底層的數據庫中,你就會發現這個選項非常有用。使用WebRowSet的利弊在展示了WebRowSet的基礎操作之后,我們總結以下使用這種方式操作數據的利弊。利+標準方案使它從不同的應用中生成和處理XML數據而不需要轉化成為可能。+數據操作的易用性——它支持滾動、更新、緩存和離線編輯。+數據和XML簡單轉化使相關代碼減少。較少的代碼意味著較少的錯誤,也就意味著更加健壯的代碼。+較少的數據庫更新可以幫助減少并發問題。弊+性能和吞吐量可能會因為附加的信息如屬性和元數據受到負面影響。在分布式應用中這可能是一個尤為突出的問題,因為巨大的XML文件需要在網絡上傳輸以充分減少數據的數量。+新的JDK版本,因為這個特征在1.4或者更老一些的JDK上并不可用。適用性WebRowSet接口適合在下面情形中使用:1、使用XML消息的應用集成,XML消息是當前頂級架構的選擇之一。Java EE應用可以使用基于JMS的集成和其他外部通信,而使用JDBC保存自己的事務狀態。在這樣一個情形下,WebRowSet API減少了編程的復雜性,也降低需要編寫的代碼量。2、來自持久性數據源的內容展示通常通過獲取數據集并把它傳遞到視圖組件(如JSP)中來完成。一個可用的方式就是在應用XSLT之前把數據集轉化為XML,然后產生展示的內容。這種選擇提供了更好的可維護性,因為它減少來自展示內容的組件的格式化。總結直到最近,在數據庫和XML之間來回的數據轉化請求曾經是大部分應用開發和測試資源中一項主要任務。幸運的是,最新的JDBC API包含了一些特點例如數據集的精確導航、數據集的高速緩存、把數據集寫入到XML中等等。對于企業級程序員RDBMS的重要性以及隨著當前不斷增長的Java和XML應用的普及度,像WebRowSet這樣的接口提供的特征將會更加有用。那么,現在是時候重新考慮一下了,在下一個使用RDBMS作為數據持久化的Java/XML應用中,你是否仍然采用傳統的數據訪問方式;WebRowSet也許可以讓你耳目一新。資源Matrix:http://www.matrix.org.cn本文的示例代碼Sun’s WebRowSet API文檔頁面Sharad Acharya在物流、保險、銀行和抵押等多行業范圍的軟件工程領域有超過8年的經驗。 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 任何現實世界中的企業級應用都需要訪問持久化存儲。關系型數據庫管理系統(RDBMS)是使用最廣泛的持久化存儲機制,它支持使用SQL進行數據查詢和更新。JDBC(Java DataBase Connectivity)是一系列的API,這些API為Java程序提供了一個使用SQL查詢和更新RDBMS的框架。通過Java程序從數據庫中獲取數據或者更新數據庫的過程
標簽: JDBC
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产剧情一区| 久久亚洲道色| 日韩视频中文| 亚洲精品激情| 国产精品一区二区精品| 久久精品国产久精国产爱| 免费一级欧美在线观看视频| 国产精品xxx| 日韩深夜视频| 免费日韩一区二区| 国产美女久久| 亚洲www啪成人一区二区| 99在线精品免费视频九九视| 亚洲精品大片| 精品视频在线一区二区在线| 欧美成人a交片免费看| 国产免费成人| 久久99精品久久久久久园产越南| 久久影院午夜精品| 亚洲欧美网站| 国产精品大片| 日韩av首页| 蜜臀av亚洲一区中文字幕| 国产高清精品二区| 在线成人直播| 麻豆精品视频在线观看免费| 亚洲性视频h| 国产伦精品一区二区三区千人斩| 日韩精品首页| 91麻豆精品| 91tv亚洲精品香蕉国产一区| 天堂俺去俺来也www久久婷婷| 国内在线观看一区二区三区| 国产日韩专区| 97精品国产一区二区三区| 综合激情婷婷| av中文字幕在线观看第一页| 亚洲一区欧美| 午夜影院一区| 欧美亚洲国产日韩| 91久久中文| 国产激情在线播放| 日日夜夜免费精品视频| 日韩精品免费一区二区三区| 日本午夜精品| 亚洲国产成人精品女人| 精品黄色一级片| 亚洲毛片网站| 欧美成人高清| 欧美日韩国产观看视频| 国产精品一区二区免费福利视频| 伊人影院久久| 中文一区一区三区高中清不卡免费| 日韩一区二区三区精品视频第3页| 日韩中文影院| 你懂的国产精品永久在线| 亚洲精品看片| 免费日韩av| 欧美一区二区三区高清视频| 精品一区二区三区四区五区| 日韩高清欧美激情| 老司机精品久久| 99久久亚洲精品| 久久免费精品| 国产欧美在线| 亚洲精品高潮| 亚洲欧美日本视频在线观看| 正在播放日韩精品| 久久av导航| 国产精品一区二区三区美女| 日韩精品中文字幕吗一区二区| 黄色亚洲在线| 亚洲高清二区| 日韩国产网站| 久久91导航| 日韩精品中文字幕第1页| 国产一区二区三区亚洲| 国产精品99精品一区二区三区∴| 欧美日韩亚洲三区| 国产日韩在线观看视频| 欧美在线日韩| 国产乱码精品一区二区亚洲| 亚洲人成网站在线在线观看| 伊人久久亚洲| 日韩在线观看中文字幕| 亚洲精选91| 日韩一区二区三区免费视频| 日本亚洲视频在线| 日韩在线网址| 欧美日韩 国产精品| 国产精品日韩精品在线播放| 欧美激情在线精品一区二区三区| 国产精品a级| 成人精品高清在线视频| 日韩在线中文| 亚洲午夜一级| 先锋影音久久久| 久久aⅴ国产紧身牛仔裤| 亚洲开心激情| 国产精品手机在线播放| 精品精品国产三级a∨在线| 伊人久久国产| 亚洲精品一区二区妖精| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日本aⅴ亚洲精品中文乱码| 日韩精品一二区| 蜜臀av在线播放一区二区三区 | 三级在线观看一区二区| 亚洲免费成人av在线| 青草久久视频| 福利一区视频| 免费视频亚洲| 蜜臀久久99精品久久久画质超高清 | 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲一区有码| 国产精品3区| 99热国内精品| 亚洲精品乱码| 国产不卡精品| 99在线精品免费视频九九视| 日韩精品国产欧美| 国产一区国产二区国产三区| 91九色精品| 日韩成人精品一区二区三区 | 日本少妇精品亚洲第一区| 国产日产一区| 欧美一级鲁丝片| 日韩一区二区久久| 国产精品伊人| 亚洲国产专区校园欧美| 日韩黄色在线观看| 五月天av在线| 日韩va亚洲va欧美va久久| 香蕉成人av| 91亚洲精品视频在线观看| 美女一区网站| 亚洲aa在线| 裤袜国产欧美精品一区| 亚洲欧美日韩综合国产aⅴ| 国产精品第十页| 欧美a级一区| 免费一级欧美片在线观看网站| 日韩视频久久| 精品久久久中文字幕| 欧美一级专区| 另类专区亚洲| 日韩欧美三区| 激情丁香综合| 美女国产精品久久久| 日韩精品一二三| 欧美成人精品三级网站| 国产日韩一区二区三区在线播放| 伊人久久大香线蕉av不卡| 国产精品nxnn| 亚洲精品伊人| 日韩精品免费一区二区在线观看| 亚洲毛片一区| 欧洲激情综合| 国产精品精品| 91精品在线免费视频| 日韩亚洲精品在线| av中文资源在线资源免费观看| 日韩欧美四区| 欧美日韩国产高清| 精品国产三区在线| 日本强好片久久久久久aaa| 红桃视频亚洲| 久久久久.com| 国产aⅴ精品一区二区三区久久| 亚洲va久久久噜噜噜久久| 欧洲一区二区三区精品| 国产精一区二区| 亚洲精品精选| 日av在线不卡| 午夜欧美精品| 亚洲午夜黄色| 日韩久久精品网| 久久精品国产99国产精品| 日韩av一区二区三区四区| 免费在线视频一区| 日韩视频二区| 香蕉久久99| 久久国产欧美| 久久三级福利| 久久久久国产精品一区三寸| 欧美国产专区| 国产精品视频一区二区三区| 亚洲免费毛片| 丝袜亚洲精品中文字幕一区| 国产婷婷精品| 日韩一区二区久久| 99riav1国产精品视频| 一本一道久久a久久精品蜜桃| 特黄特色欧美大片| 婷婷成人在线| 亚洲激情欧美| 日韩一区欧美二区| 日韩专区一卡二卡| 亚洲精品欧美| 久久国产日韩欧美精品|