国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

檢測你數據庫連接的物理狀態

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

  檢測你數據庫連接的物理狀態
  
  ZDNet China
  
  29/7/2003
  
  URL: http://www.zdnet.com.cn/developer/code/story/0,2000081534,39154865,00.htm
  
  創建連接
  
  
  
  java JDBC API各種類的一個基石是java.sql.Connection類。很多問題都同其復用、共用和驗證相關。對連接的驗證在實時的應用程序中尤其重要,因為它們必須無故障運行或者將故障率降至最低。
  
  
  
  事實上,在很多情況下都可能產生連接的丟失(例如,由于數據庫的崩潰或者由于某些網絡問題的存在)。不幸的是,標準的Java API并沒有提供任何方法來檢測連接的物理狀態,所以在每種特定的情況下都需要一種解決方法。現在讓我們來看看解決這個問題的兩種方法。第一種方法是使用軟件制造商專用的API,第二種方法是使用一種檢測-失敗查詢(test-fail query)的方法。
  
  
  
  
  
  
  
  創建連接
  
  
  
  在使用任何SQL陳述式之前,應用程序必須要先連接到數據庫。建立連接的一種方法是使用java.sql工具包里的連接工廠(connection factory)——DriverManager.getConnection()。但是,建立連接的首選方式是使用javax.sql.DataSource.getConnection()。你應該在對象每次請求進行連接的時候才使用這個工廠方法,而不是在創建了連接之后將這個連接保存在對象里。下面是這個方法的一個例子:
  
  
  
  void foo(){
  
  // ...
  
  Connection conn = myDataSource.getConnection();
  
  PReparedStatement ps = conn.prepareStatement(...);
  
  // ...
  
  }
  
  
  
  此外,一個實現DataSource接口的類能夠使用命名服務來注冊,并使用JNDI API來訪問。DriverManager連接工廠和DataSource的巨大不同之處在于:DataSource能夠答應你控制連接的建立和使用。
  
  
  
  
  
  
  
  連接錯誤的問題
  
  
  
  當你的應用程序嘗試使用一個已經同數據庫斷開的連接時,你會碰到一個像下面這樣的異常:
  
  
  
  java.sql.SQLException: Io exception: The Network Adapter could not establish the connection(lo異常:網絡適配器無法建立連接)
  
  
  
  其結果是,你的SQL查詢會執行失敗。由于沒有哪個API能夠確定一個到數據庫的連接是否失效,因此你就只有在碰到SQL異常的時候才知道這個連接已經失效了。假如一個異常是同一個已斷開的連接相對應的,那么你就必須要調整這個應用程序,這樣它才能夠嘗試重新建立連接,并重新執行查詢任務。很顯然,這種處理數據庫連接的混亂商務邏輯使得代碼更輕易出錯,而且難以治理。
  
  
  
  
  
  
  
  信賴軟件制造商的API
  
  
  
  
  
  信賴軟件制造商的API
  
  
  
  處理連接斷開的一種方法是使用驅動程序專用的API,你可以使用這個API來建立到數據庫的連接。現在讓我們來看看Oracle的JDBC API。OracleConnectionCacheImpl這個類會實現javax.DataSource接口,并在你每次請求的時候驗證一下連接。此外,它還能夠通過緩沖隨后請求的連接來重復使用這個連接。換句話說,假如你關閉了數據庫,然后嘗試使用一個連接,你就會得到一個明確闡明了原因的SQL異常。看看Listing A,里面有數據源用法的一個例子。
  
  
  
  驗證連接
  
  另一個解決方案是你自己進行連接驗證。你可以編寫一個連接工廠,讓其將連接返回給請求者之前檢測連接的情況。將驗證機制從連接工廠里抽象出來是一個很好的代碼編寫慣例。要實現這一目的,你就要應用GoF策略模式,它會引入一個負責進行連接驗證的接口.
  類圖表
  
  
  
  Listing B里的AbstractDataSource類提供了DataSource接口的基礎實現,這樣就為設置和訪問連接的屬性,包括JDBC驅動程序類、URL、用戶名和密碼,提供了便利的方法。
  
  
  
  這個類的確切實現有JdbcDataSource(Listing C)和ValidDataSource(Listing D)。Listing C里的類為每個請求都創建了一個Connection對象。Listing E里的類通過使用ConnectionValidator從而提供了連接驗證的能力。
  
  
  
  Listing F里的SqlConnectionValidator是這個接口的簡單實現,在這個接口里,一個快速的SQL查詢會被執行,以驗證你認為需要進行驗證的連接。你的這一目的是通過調用validateConnection(Connection conn)方法來實現的,它會在碰到任何連接問題的時候給出一個SQL異常。
  
  
  
  
  
  
  
  驗證的好處
  
  
  
  無論你選擇使用哪種方法,建立一個有效的數據庫連接都是極其重要的,尤其是在處理要害的實時應用程序的時候。雖然定制連接驗證這種方式能夠為你提供更好的靈活性和API的獨立性,但是同使用軟件制造商所提供的API相比而言,它會降低整體的性能。你必須決定,增強可控制性所帶來的好處,同相應所增加的復雜性和代價相比是否值得。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳山县| 留坝县| 茂名市| 时尚| 乐清市| 即墨市| 长白| 洮南市| 湖州市| 仙游县| 砀山县| 新干县| 义马市| 莱州市| 友谊县| 民丰县| 会同县| 景东| 泸溪县| 楚雄市| 彰武县| 青龙| 巩义市| 石门县| 凤冈县| 波密县| 台北县| 孝义市| 阜新| 广州市| 集安市| 墨脱县| 海安县| 大兴区| 南江县| 四平市| 花莲县| 平山县| 南江县| 常熟市| 弋阳县|