亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

從JDBC數據庫提取對XML/DOM友好的數據

2019-11-18 12:49:12
字體:
來源:轉載
供稿:網友

  當前的java版本提供了完備的工具,可將輸出內容從關系數據庫查詢轉換成xml。最終獲得的將是一個DOM(文檔對象模型)文檔對象。利用XSL(可擴展樣式語言),它進而能轉換成任意輸出格式。本文介紹如何構建一個接口,用它讀取與JDBC兼容的任何關系數據庫,創建一個結果集,以便轉換成任何類型的字符輸出。
  
  接口
  最開始必須定義一個接口。這個接口在實現后,應該能建立一個數據庫連接、向其傳遞一個SQL查詢、讀取結果以及創建一個DOM文檔對象。下面的DataBaseHandler接口定義了與數據庫進行交互的行為(注重,本例缺少import語句,所以不能編譯)。尤其要注重的是,getDocument()查詢所返回的文檔將由其他進程轉換成所需的輸出類型,這種轉換是獨立于數據庫的。
  
  public interface DataBaseHandler{
  
  Document getDocument(String sqlQuery);
  String getUrlString();
  void setUrlString(String urlString);
  String getUserName();
  
  void setUserName(String userName);
  String getPassWord();
  void setPassword(String password);
  String getDriverName();
  void setDriverName(String driverName);
  }
  
  這是與數據庫交互所需的最起碼的行為。它包括幾個get和set方法,用于確保數據庫驅動程序名稱、用戶名和密碼都得到了設置,或者以后能夠檢索到。下面總結了DataBaseHandler的需求:
  
  urlString
  userName
  password
  sqlQuery string
  driverName
  調用set方法之后,getDocument()方法將完成所有實際的工作:
  
  Document getDocument(String sqlQuery);
  
  傳給set方法的所有輸入都可能已經傳給getDocument()方法。從重用性的角度說,應該對這兩個方法進行分隔,使類的實現能方便和靈活地利用這種多重輸入傳遞功能。
  
  接口的一個抽象實現
  接著要定義一個抽象類,它負責實現要求的大多數行為和操作,但某種特定數據庫類型需要的那些行為必須排除在外。AbstractDataBaseHandler執行set和get方法的泛化操作,而且一旦設置好所有數據庫處理參數,AbstractDataBaseHandler就要執行與數據庫進行交互的泛化操作。惟一需要拿掉的就是與特定數據庫類型有關的那些細節,以及為了獲得DataBaseHandler的一個具體實現而必須定義的設置細節。
  
  get和set方法負責設置私有類變量;通過擴展AbstractDataBaseHandler而創建數據庫處理器對象時,這些私有類變量將發生變化。這個過程是非常直觀易懂的,如清單A所示。
  
  getDocument()方法中的操作位于一個try catch塊中。數據庫事務處理過程中一旦發生任何錯誤,或者要求的任何輸入參數沒有設置,錯誤就會被捕捉。SQLException答應多個異常鏈接到一起,這為我們帶來了極大的方便。你必須遍歷SQLException,檢查數據庫交互過程中可能發生的所有問題。
  
  } catch (SQLExceptionsqle) {
  while(sqle != null) {
  System.err.PRintln ("**** SQLException ****/n");
  System.err.println ("** SQLState: " + sqle.getSQLState() + "/n");
  System.err.println ("** Message: " + sqle.getMessage() + "/n");
  System.err.println ("** Error Code: " + sqle.getErrorCode() + "/n");
  System.err.println ("***********/n");
  /* There could be multiple exception messages chained together. */
  sqle= sqle.getNextException();
  
  和其他任何異常一樣,你可以為異常處理實現一個Java日志,用它記錄發生的任何問題。必須確??赡馨l生的所有異常都包含在try catchā?????塊中,以便分門別類地采取操作,讓用戶知道執行期間發生了什么問題。下面總結了SQLException包含的信息:
  
  描述錯誤一個字符串
  一個SQLstate字符串 string
  一個整型錯誤代碼,它是不同的廠商特有的
  到下一個異常的鏈接
  getDocument()方法首先檢查要求的所有參數是否齊備,否則引發一個異常:
  
  if(getUrlString() == null){
  throw new Exception("Database URL String is not set.");
  }
  if(getUserName() == null){
  throw new Exception("Database User Name is not set.");
  }
  if (getPassword() == null){
  throw new Exception("Database Password is not set.");
  }
  if (getDriverName() == null){
  throw new Exception("Database Driver Name is not set.");
  }
  
  一個SQL查詢字符串作為輸入來傳遞。它可為你需要的任何SQL字符串,比如:
  
  SELECT * from mytable;
  SELECT overdue, name, duedate, description from myactiontable;
  
  接著創建JDBC驅動程序的一個實例,它向DriverManager注冊驅動程序:
  
  Class.forName(getDriverName());
  
  DriverManager現在可使用注冊的驅動程序來創建一個數據庫連接,并接管所有數據庫操作。
  
  
  不同的數據庫要使用不同的URL連接字符串。對于Oracle數據庫,字符串的形式是:
  
  host:port:sid
  
  具體需要的值是在tsnames配置文件中定義的,該文件的名稱是tnsnames.ora,其中的設置項如下所示:
  
  mydb =
  (DESCRIPTION =
  (ADDRESS =
  (PROTOCOL = TCP)
  (Host = SERVERX.www.mycompany.com)
  (Port = 1521)
  )
  (CONNECT_DATA =
  (SID = examplesid)
  (GLOBAL_NAME = exampledb)
  )
  )
  
  然后根據前面設置的URL字符串、用戶名和密碼來創建一個Connection對象,再用Connection對象來創建一個Statement對象,并針對數據庫執行查詢,以便返回一個結果集對象。所有細節由JDBC無縫地處理。
  
  取決于具體的SQL語句,語句執行之后也許不會返回任何值。這個類驗證是否缺少返回值,只有在至少返回了一個數據行的前提下,才在文檔中添加Element節點。列名要從一個ResultSetMetaData對象中檢索,該對象是通過結果集的一個get方法來獲得的:
  ResultSetMetaDatarsmd = resultSet.getMetaData();
  
  在一個while循環中,將使用結果集的游標或行號來遍歷整個結果集,同時生成一個DOM文檔對象。
  
  while(resultSet.next()){
  // add Element and TextNode objects which define each row and each data column.
  }
  
  處理了ResultSet及其元數據后,就結束了與數據庫的交互。之后,就可用XML/DOM對象來容納數據,并用XSL來格式化數據。
  
  小結
  本文講述了如何創建一個接口,以便為DataBaseHandler定義泛化行為,以及如何用一個抽象類來實現它,以便將抽象類擴展成一個具體的、自定義的數據庫處理程序。這種行為答應你透明地連接一個關系數據庫,執行SQL查詢,并返回一個結果集,隨后可以將它的數據轉換成一個DOM文檔對象。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美美女15p| 国产精品视频网| 亚洲区bt下载| 国产精品爱啪在线线免费观看| 亚洲国产精久久久久久| 亚洲桃花岛网站| 日韩电视剧在线观看免费网站| 91爱视频在线| 久久影视免费观看| 日韩美女在线播放| 久久久久久久久久久成人| 国产精品一区专区欧美日韩| 欧美日韩国产色视频| 欧美高清理论片| 国产精品入口免费视| 2019中文字幕在线| 日韩高清不卡av| 久久男人的天堂| 国产69精品久久久久久| 久久激情五月丁香伊人| 黄色成人在线免费| 亚洲激情免费观看| 国产日韩欧美影视| 欧洲成人在线视频| 亚洲欧美激情四射在线日| 久久影院在线观看| 8090成年在线看片午夜| 亚洲电影av在线| 亚洲精品久久久一区二区三区| 91在线观看免费| 久久久久久久久网站| 国产精品久久久久久久午夜| 亚洲欧美一区二区三区在线| 日韩av在线免费观看一区| 91爱爱小视频k| 米奇精品一区二区三区在线观看| 久久国产精品网站| 欧美第一页在线| 亚洲一区二区福利| 亚洲的天堂在线中文字幕| 日本中文字幕成人| 日韩精品中文字幕视频在线| 亚洲视频欧洲视频| 日本不卡免费高清视频| 亚洲а∨天堂久久精品9966| 国产精品久久久久影院日本| 97在线日本国产| 亚州av一区二区| 亚洲色图在线观看| 欧美精品激情在线观看| 亚洲激情第一页| 国产精品成人一区二区三区吃奶| 欧美国产视频一区二区| 欧美日韩国产一区二区三区| 久久免费观看视频| 免费不卡在线观看av| 亚洲人成啪啪网站| 欧美日韩性视频| 国产亚洲精品久久久久久777| 欧美专区国产专区| 日韩中文理论片| 国产精品视频色| 深夜福利日韩在线看| 亚洲精选中文字幕| 日韩第一页在线| 这里只有精品视频在线| 成人a在线观看| 777精品视频| 国产成人aa精品一区在线播放| 国产日本欧美一区二区三区| 日本一区二区在线免费播放| 国产精品久久久久久一区二区| 在线日韩第一页| 亚洲人成自拍网站| 国产精品com| 亚洲国产精彩中文乱码av在线播放| 成人免费看片视频| 久久久久久av| 日韩欧美综合在线视频| 精品久久久久久久久国产字幕| 精品国产31久久久久久| 亚洲999一在线观看www| 97激碰免费视频| 欧美高清视频一区二区| 欧美孕妇孕交黑巨大网站| 国产成人短视频| 日韩精品在线观看一区| 日本最新高清不卡中文字幕| 色综合五月天导航| 国产精品日韩在线一区| 久久久久久亚洲精品| 国产精品久久久久久久久免费看| 国产精品美女久久久久久免费| 亚洲激情成人网| 这里只有视频精品| 国产精品扒开腿做| 欧美理论电影在线播放| 国产精品福利观看| 亚洲欧美制服中文字幕| 免费不卡欧美自拍视频| 日韩美女激情视频| 亚洲国产成人爱av在线播放| 日本久久久久久久久| 成人午夜激情免费视频| 日韩欧美精品免费在线| 久久精品人人做人人爽| 国产精品流白浆视频| 国产精品中文久久久久久久| 亚洲激情 国产| 亚洲成人网av| 欧美精品在线极品| 国产999精品| 欧美精品久久久久久久久久| 欧美激情精品久久久久久变态| 欧美有码在线观看视频| 日韩资源在线观看| 欧美www视频在线观看| 欧美国产日韩一区二区三区| 欧美多人乱p欧美4p久久| 97精品国产91久久久久久| 这里只有精品在线观看| 日韩精品免费一线在线观看| 中文字幕亚洲激情| 美乳少妇欧美精品| 亚洲视频综合网| 日韩中文在线视频| 欧美精品videossex88| 亚洲最新av在线网站| 日韩女优在线播放| 日本成人在线视频网址| xvideos亚洲人网站| 亚洲欧美另类中文字幕| 一区二区三区日韩在线| 国产精品久久久久久中文字| 欧美成在线观看| 97久久精品国产| 亚洲精品日韩av| 91av在线视频观看| 欧日韩不卡在线视频| 668精品在线视频| 欧美视频在线观看免费网址| www.亚洲免费视频| 成人国产精品色哟哟| 91精品久久久久久综合乱菊| 欧美性猛交xxxx偷拍洗澡| 日韩大片免费观看视频播放| 亚洲国产精品va在线观看黑人| 粗暴蹂躏中文一区二区三区| 国产精品福利片| 欧洲精品毛片网站| 97在线观看视频| 国产精品电影网| 日韩经典第一页| 全亚洲最色的网站在线观看| 欧美性受xxxx黑人猛交| 国产在线日韩在线| 欧美大学生性色视频| 亚洲毛片在线观看| 国产欧美精品xxxx另类| 日韩成人av一区| 日韩在线www| 久久青草精品视频免费观看| 亚洲欧美日韩国产中文专区| 亚洲sss综合天堂久久|