1. 程式人生 > >Java 資料庫事務和連線池

Java 資料庫事務和連線池

資料庫事務

Java 本身同樣對資料庫事務處理作了支援,事務針對上篇部落格 JDBC 連線資料庫是涉及到的 Connection 物件,獲取的 Connection 物件預設是自動 commit(提交) 對資料庫做的修改的,由此當事務不能完整執行就會導致資料庫資料修改錯誤(如常見的銀行轉賬的例子中只減去了一個賬戶的餘額卻因此時發生錯誤而沒有增加另一個賬戶的餘額),這種不完整的操作是不應該被 commit 的,因此可以通過以下方法實現資料庫回滾(rollback)。
connection.setAutoCommit(false); 取消預設提交 (獲取該物件後設置)
connection.commit()

完整執行一次操作後通過此方法手動提交
connection.rollback() 中途某一部分出現錯誤導致操作不能完整完成時使用此方法進行回滾。

資料庫連線池

資料庫連線池可以自己實現,也可以使用 Java 的開源連線池。常見的有 DBCP(不常用)和 C3P0。使用兩個資料庫連線池前都需要匯入各自對應的 jar 包,這個百度一下就可以找到。

DBCP

新增 jar 包後,以如下方式建立連線池並從中獲取連線物件:
BasicDataSource dataSource = new BasicDataSource();
通過使用以下方法設定建立連線的必要引數,如不使用連線池獲取連線物件時也同樣需要的這些引數:
dataSource.setDriverClass();

設定 driver 類,例如如果是 mysql 就是 “com.mysql.jdbc.Driver”;
dataSource.setUrl(); 設定連線地址;
dataSource.setUsername(); 設定資料庫連線使用者名稱;
等;
開發中使用讀取配置檔案的方式配置這些引數。
通過配置檔案配置方法:
BasicDataSourceFactory factory = new BasicDataSourceFactory();
BasicDataSource dataSource = factory.createDataSource(properties);
Connection connection = dataSource.getConnection();
最後這句就獲取到了 Connection 物件。

C3P0

ComboPooledDataSource cpds = new ComboPolledDataSource();
cpds.set... 等方法設定各種引數,類似 DBCP;
若通過配置檔案配置,配置檔名一定為:c3p0-config.xml (放入 Java 工程的 src 資料夾下),該 xml 檔案中引數標籤的名稱和及其內容的寫法可以通過檢視 cpds 的 set 等方法得到提示(set 後面的就是對應的引數名字,將該引數名字和它對應的值以 xml 的格式寫入該 xml 檔案,cpds 物件被建立時就會自動配置)。