1. 程式人生 > >JDBC學習筆記(4)之PreparedStatement、ResultSetMetaData、資料庫連線池的概念性知識

JDBC學習筆記(4)之PreparedStatement、ResultSetMetaData、資料庫連線池的概念性知識

PreparedStatement: :預編譯的Statement物件,是Statement的子介面;

因此,Statement中實現的方法PreparedStatement也可以呼叫,PreparedStatement還可以預編譯SQL語句,預編譯的SQL語句儲存在PreparedStatement物件中,可以使用該物件多次高效的執行該語句。

PreparedStatement較Statement多的好處:

(1)PreparedStatement預編譯SQL語句,效能更好;

(2)PreparedStatement不需“拼接”SQL語句,程式設計更簡單方便;

(3)PreparedStatement可以防止SQL注入,安全性更好;

ResultSetMetaData:ResultSet 裡包含一個 getMetaData() 方法,該方法返回該ResultSet 對應的 ResultSetMetaData 物件。一旦獲得了ResultSetMetaData 物件,就可通過 ResultSetMetaData 提供的大量的方法來返回 ResultSet 的描述資訊

常用方法:

(1)int getColumnCount():返回該ResultSet的列數量;

(2)String getColumnName(int column):返回指定索引的列名;

(3)int getColumnType(int column):返回指定索引的列型別。

 CHAR = 1,DOUBLE = 8,FLOAT =  6,INTEGER  =  4,VARCHAR = 12......

批量更新
(1)JDBC 還提供了一個批量更新的功能,使用批量更新時,多條 SQL 語句將會被作為一批操作被同時收集、並同時提交。
 (2)批量更新必須得到底層資料庫的支援,可以通過呼叫DatabaseMetaData 的 supportsBatchUpdates 方法來檢視底層資料庫是否支援批量更新。
(3) 使用批量更新也需要先建立一個 Statement 物件,然後利用該物件addBatch 方法將多條 SQL 語句同時收集起來,最後呼叫 Statement 物件的 executeBatch 同時執行這些 SQL

注意:executeBatch只是把sql語句一次性提交到伺服器,但是伺服器執行sql語句仍是一句一句執行,利用conn.commit()可實現一次性執行,不過conn.AutoCommit()預設true;必須設定為false,不過此設定危險性較大,一旦onn.AutoCommit()設定為false,每次執行sql語句後,都得conn.commit()!

資料庫連線池
 資料庫連線池的解決方案是:當應用程式啟動時,系統主動建立足夠的資料庫連線,並將這些連線組成一個連線池。每次應用程式請求資料庫連線時,無需重新開啟連線,而是從池中取出已有的連線使用,使用完後,不再關閉資料庫連線,而是直接將該連線歸還給連線池。通過使用連線池,將大大提高程式執行效率。

資料庫連線池的常用引數有如下:
(1)資料庫的初始連線數;setInitialPoolSize()
(2) 連線池的最大連線數;setMaxPoolSize()
(3)連線池的最小連線數;setMinPoolSize()
(4) 連線池的每次增加的容量;setAcquireIncrement();

兩種常見的開源資料來源
(1)DBCP 是Apache 軟體基金組織下的開源連線池實現,該連線池依賴該組織下的另一個開源系統:common-pool 。
(2)相比之下 ,C3P0 資料來源效能更勝一籌,Hibernate 就推薦使用該連線池。C3P0 連線池不僅可自動清理不再使用的Connection ,還可以自動清理Statement 和ResultSet 。C3P0 連線池需要版本為1.3 以上的JRE ,推薦使用1.4 以上的JRE 。

使用開源資料來源需要匯入相應的包。