十個JDBC的最佳實踐

JDBC是Java爲多種關係型數據庫提供的統一的訪問接口,以下是我長期使用JDBC總結的十個最佳實踐。

JDBC最佳實踐1:使用PrearedStatement

任何一個使用過JDBC的Java程序員幾乎都知道這個,PreparedStatment可以通過預編譯的方式避免我們在拼接SQL時造成SQL注入。

JDBC最佳實踐2、使用ConnectionPool(連接池)

使用連接池作爲最佳實踐幾乎都成了公認的標準。一些框架已經提供了內建的連接池支持,例如Spring中的Database Connection Pool,如果你的應用部署在JavaEE的應用服務器中,例如JBoss,WAS,這些服務器也會有內建的連接池支持,例如DBCP。使用連接的原因簡單的說就是因爲創建JDBC連接耗時比較長,如果每次查詢都重新打開一個連接,然後關閉,性能將會非常低,而如果事先創建好一批連接緩存起來,使用的時候取出,不使用的時候仍不關閉,將會節省大量的創建關閉連接的時間。

JDBC最佳實踐3、禁用自動提交

這個最佳實踐在我們使用JDBC的批量提交的時候顯得非常有用,將自動提交禁用後,你可以將一組數據庫操作放在一個事務中,而自動提交模式每次執行SQL語句都將執行自己的事務,並且在執行結束提交。

JDBC最佳實踐4、使用Batch Update

JDBC的API提供了通過addBatch()方法向batch中添加SQL查詢,然後通過executeBatch()執行批量的查詢。JDBC batch update可以減少數據庫數據傳輸的往返次數,從而提高性能。

JDBC最佳實踐5:使用列名獲取ResultSet中的數據,從而避免invalidColumIndexError

JDBC中的查詢結果封裝在ResultSet中,我們可以通過列名和列序號兩種方式獲取查詢的數據,當我們傳入的列序號不正確的時候,就會拋出invalidColumIndexException,例如你傳入了0,就會出錯,因爲ResultSet中的列序號是從1開始的。另外,如果你更改了數據表中列的順序,你也不必更改JDBC代碼,保持了程序的健壯性。有一些Java程序員可能會說通過序號訪問列要比列名訪問快一些,確實是這樣,但是爲了程序的健壯性、可讀性,我還是更推薦你使用列名來訪問。

JDBC最佳實踐6:使用變量綁定而不是字符串拼接

在第一條最佳實踐中,我們已經說過要使用PreparedStatment可以防止注入,而使用?或者其他佔位符也會提升性能,因爲這樣數據庫就可以使用不同的參數執行相同的查詢,這個最佳實踐帶來更高的性能的同時也防止了SQL注入。

JDBC最佳實踐7:要記住關閉Statement、PreparedStatement和Connection

通常的做法是在finally塊中關閉它們,這樣做的好處是不論語句執行正確與否,不管是否有異常拋出,都能保證資源被釋放。在Java 7中,可以通過Automatic Resource Management Block來自動的關閉資源。

JDBC最佳實踐8:選擇合適的JDBC驅動

有四種JDBC驅動,分別是

  • 第一種JDBC驅動叫做JDBC-ODBC Bridge driver (bridge driver)
  • 第二種JDBC驅動叫做Native-API/partly Java driver (native driver)
  • 第三種JDBC驅動叫做AllJava/Net-protocol driver (middleware driver)
  • 第四種JDBC驅動叫做All Java/Native-protocol driver (Pure java driver)
JDBC最佳實踐9:儘量使用標準的SQL語句,從而在某種程度上避免數據庫對SQL支持的差異

不同的數據庫廠商的數據庫產品支持的SQL的語法會有一定的出入,爲了方便移植,我推薦使用標準的ANSI SQL標準寫SQL語句。

JDBC最佳實踐10:使用正確的getXXX()方法

當從ResultSet中讀取數據的時候,雖然JDBC允許你使用getString()和getObject()方法獲取任何數據類型,推薦使用正確的getter方法,這樣可以避免數據類型轉換。


本文來自http://www.oschina.net/question/82993_69388

發佈了81 篇原創文章 · 獲贊 30 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章