成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從設計不足的JDBC,說到數據庫鏈接池

開發 后端
JDBC是Java里邊一個很重要的組成部分,現代的很多軟件應用,都和數據庫相關,因此,JDBC起著日益重要的作用。即便一個Java開發工程 師不怎么直接使用JDBC,而是使用ORM等框架,但是這些框架也是給予JDBC包裝而來的。因此,JDBC的不足,也給這些ORM還有數據庫連接池組件 帶來了很大的不便。

JDBC是Java里邊一個很重要的組成部分,現代的很多軟件應用,都和數據庫相關,因此,JDBC起著日益重要的作用。即便一個Java開發工程 師不怎么直接使用JDBC,而是使用ORM等框架,但是這些框架也是給予JDBC包裝而來的。因此,JDBC的不足,也給這些ORM還有數據庫連接池組件 帶來了很大的不便。

我們知道,Java的Statement(和PreparedStatement),在execute查詢和執行語句時,都需要檢查 SQLException,這個SQLException實際上表示的涵義太寬泛了,這也就是我在題目中提到的“缺乏設計”,實際上,一個 Statement,執行的時候出錯,有著多種可能,應該把這些錯誤分一下類來設計,這樣表示的更清楚。

比如。在Statement去執行一個SQL時,很有可能是其所依賴的Connection被關閉了,這個時候,執行語句跑出的SQLException實際上是不合適的,應該是SQLConnectionException;

比如,要去一個不存在的表中select,執行時,跑出SQLException實際上是很對的;

但是我們看到,不管JDBC的版本怎么提升,從來也沒有出現過SQLConnectionException這種東西,不管SQL執行時除了什么錯,都是SQLExceptin。這非常像當初剛剛學Java時,寫一個接口,通通聲明為拋出Exception....

那么這個問題會影響到什么呢?如果每次使用都是直接創建連接,使用并且關閉還好,遇到異常就關閉就完事了,但是我們知道,目前很多開發使用的都是連接池,池化連接的close不是真正的關閉,而是將連接送回池中。

例如代碼為:

  1. Connection conn = null
  2. try
  3.  
  4.     conn = pool.getConnection(); 
  5.     conn..... 
  6. }catch(Exception ex){ 
  7.    ... 
  8. }finally
  9.  
  10.   if(conn!=null)conn.close(); 

題在于,如果出現異常了(一般是SQLException),應該怎么處理?按照邏輯,應該是如果是SQL查了一個不存在的表之類的,當然是連接回池,如果是連接壞了,當然是直接關閉。

但是現在我們能判斷嗎?因為只有SQLException,我們判斷不出來。

根據SQLException的Message判斷嗎?不同數據庫,Message是不同的。。。

還有可恨的,大多數數據庫連接池,實際上是不向外提供“真正關閉一個連接”這個操作時,當然,這么做的考慮是為了屏蔽池化連接和直接創建的連接的區別,但是,這個接口封上之后,面對的這種問題應該怎么處理呢?

目前。大多數連接池也有一種辦法解決,就是配置一個SQL,每次取出一個連接用的時候,都先執行一下,如果出錯,表示連接壞了,連接池(連接池自身 當然能夠真正關閉連接)真正關閉這個連接,給一個新的連接供外部請求者使用。但這是個拙劣的方法,因為一個SQL意味著和數據庫的一個TCP交互,性能的 損耗是客觀存在的,高并發、高效率的系統不應該用這種方法。

如果JDBC能夠區分,那么將省去了很多麻煩,不管在連接池內部處理還是外部處理,至少都是符合邏輯的。在這里也建議使用一些開源數據庫連接池組件 的朋友們,如果你要選擇一種連接池,一定注意這種連接池這種情況下的處理,是怎樣設計實現的,這一是表明了開發者考慮問題是否周全,而是關乎系統效率和穩 定性。

可能有的朋友會問,Java不會這么缺乏好的設計嗎?我其實也不希望Java有這種缺陷,希望有一種好的機制來解決我的問題,但是很可惜沒有看到。 之前曾經花了很大的力氣研究Java的源碼,曾經認為Java有很多地方值得學習,所以去研讀。結果發現,有很多代碼非常好,同時也發現很多代碼很糟糕; 甚至不是實現代碼的問題,而是設計時粗枝大葉。

一時、一天細心容易做到,但是在職業生涯中總保持細心、周全的考慮問題并不是件容易的事情,所以雖然覺得這里有問題,但是也不是嘲諷或者責難別人, 而是希望Java早一天認識到這些基礎庫的問題,對這些東西進行一些梳理和改進,做好基礎語言,別盲目的追逐熱點,把高樓大廈建立在沙灘上。

原文鏈接:http://windshome.iteye.com/blog/1921133

責任編輯:陳四芳 來源: ITeye.com
相關推薦

2009-07-17 13:32:49

JDBC數據庫

2009-07-02 09:00:25

JDBC設計JSP訪問數據庫

2009-03-16 09:09:18

數據庫JDBCJSP

2019-01-10 17:08:09

華為

2020-09-01 11:10:39

數據庫鏈接池HikariCP

2010-10-26 16:15:33

連接Oracle數據庫

2010-12-10 16:19:04

JDBC數據庫連接池DDLSQLJ存儲過程

2020-08-06 11:25:29

數據庫鏈接池線程

2009-07-06 17:23:34

JDBC連接數據庫

2009-07-16 17:22:56

JDBC數據庫編程

2010-04-16 09:36:45

JDBC橋接Oracl

2013-06-07 19:04:15

測試

2010-04-06 11:19:28

Oracle數據庫

2010-04-06 11:30:09

Oracle 數據庫

2010-09-29 08:52:34

MySQL

2009-07-20 15:56:08

JDBC連接數據庫步驟

2010-06-04 09:33:28

連接MySQL數據庫

2009-07-14 17:18:23

JDBC怎么連接數據庫

2009-07-07 17:42:28

2010-08-18 16:53:35

連接DB2數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产激情在线 | 精品国产一区二区三区四区在线 | 羞羞的视频免费在线观看 | 欧美成人一区二区三区 | 久久国产成人 | 亚洲欧美国产精品久久 | 97国产超碰| 狠狠干综合视频 | 亚洲欧美网 | 久久无毛| 四虎影音 | 欧美色综合一区二区三区 | 黄色男女网站 | 高清久久久 | 亚洲一区在线免费观看 | 亚洲精品国产第一综合99久久 | 免费污视频 | 黄色大片网站 | www.日本三级 | 91精品国产91久久综合桃花 | 高清av在线| 亚洲国产成人一区二区 | 久久久噜噜噜www成人网 | 毛片在线免费播放 | 日韩欧美一区二区三区免费看 | 国产视频一区在线观看 | 综合欧美亚洲 | 欧美色影院 | 国产日韩欧美精品一区二区三区 | 亚洲人人| 久久伊人亚洲 | 免费av毛片 | 成人久久久久 | 久久99精品久久久 | 婷婷在线免费 | 国产成人精品999在线观看 | 成人3d动漫一区二区三区91 | 在线免费观看黄色av | 视频一区二区在线观看 | 国产精品视频免费观看 | 国产乡下妇女做爰 |