鍍金池/ 教程/ Java/ JDBC事務
JDBC Like子句實例
JDBC異常
JDBC排序數(shù)據(jù)實例
JDBC事務保存點(setSavepoint, releaseSavepoint )實例
JDBC結(jié)果集
JDBC Statement對象執(zhí)行批量處理實例
JDBC事務
JDBC SQL語法
JDBC快速入門教程
JDBC創(chuàng)建數(shù)據(jù)庫實例
JDBC流ASCII和二進制數(shù)據(jù)
JDBC刪除表實例
JDBC Statements, PreparedStatement和CallableStatement語句
JDBC WHERE子句條件實例
JDBC插入數(shù)據(jù)實例
JDBC驅(qū)動程序類型
JDBC環(huán)境配置
JDBC數(shù)據(jù)庫連接
JDBC刪除數(shù)據(jù)實例
JDBC PrepareStatement對象執(zhí)行批量處理實例
JDBC刪除數(shù)據(jù)庫實例
JDBC事務提交/回滾實例
JDBC更新數(shù)據(jù)實例
JDBC存儲過程調(diào)用
JDBC教程
JDBC批量處理
JDBC創(chuàng)建表實例
JDBC數(shù)據(jù)類型
JDBC是什么?
JDBC簡單示例代碼
JDBC選擇數(shù)據(jù)庫實例
JDBC查詢數(shù)據(jù)實例

JDBC事務

如果JDBC連接處于自動提交模式,默認情況下,則每個SQL語句在完成后都會提交到數(shù)據(jù)庫。

對于簡單的應用程序可能沒有問題,但是有三個原因需要考慮是否關閉自動提交并管理自己的事務 -

  • 提高性能
  • 保持業(yè)務流程的完整性
  • 使用分布式事務

事務能夠控制何時更改提交并應用于數(shù)據(jù)庫。 它將單個SQL語句或一組SQL語句視為一個邏輯單元,如果任何語句失敗,整個事務將失敗。

要啟用手動事務支持,而不是使用JDBC驅(qū)動程序默認使用的自動提交模式,請調(diào)用Connection對象的setAutoCommit()方法。 如果將布爾的false傳遞給setAutoCommit(),則關閉自動提交。 也可以傳遞一個布爾值true來重新打開它。

例如,如果有一個名為connConnection對象,請將以下代碼關閉自動提交 -

conn.setAutoCommit(false);

提交和回滾

完成更改后,若要提交更改,那么可在連接對象上調(diào)用commit()方法,如下所示:

conn.commit( );

否則,要使用連接名為conn的數(shù)據(jù)庫回滾更新,請使用以下代碼 -

conn.rollback( );

以下示例說明了如何使用提交和回滾對象 -

try{
   //Assume a valid connection object conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();

   String SQL = "INSERT INTO Employees  " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Submit a malformed SQL statement that breaks
   String SQL = "INSERTED IN Employees  " +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // If there is no error.
   conn.commit();
}catch(SQLException se){
   // If there is any error.
   conn.rollback();
}

在這種情況下,上述INSERT語句不會成功執(zhí)行,因為所有操作都被回滾了。

為了更好的理解,建議學習研究“事務提交示例代碼”。

使用保存點

新的JDBC 3.0新添加了Savepoint接口提供了額外的事務控制能力。大多數(shù)現(xiàn)代DBMS支持其環(huán)境中的保存點,如Oracle的PL/SQL。

設置保存點(Savepoint)時,可以在事務中定義邏輯回滾點。 如果通過保存點(Savepoint)發(fā)生錯誤時,則可以使用回滾方法來撤消所有更改或僅保存保存點之后所做的更改。

Connection對象有兩種新的方法可用來管理保存點 -

  • setSavepoint(String savepointName): - 定義新的保存點,它還返回一個Savepoint對象。
  • releaseSavepoint(Savepoint savepointName): - 刪除保存點。要注意,它需要一個Savepoint對象作為參數(shù)。 該對象通常是由setSavepoint()方法生成的保存點。

有一個rollback (String savepointName)方法,它將使用事務回滾到指定的保存點。

以下示例說明了使用Savepoint對象 -

try{
   //Assume a valid connection object conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();

   //set a Savepoint
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1");
   String SQL = "INSERT INTO Employees " +
                "VALUES (106, 24, 'Curry', 'Stephen')";
   stmt.executeUpdate(SQL);  
   //Submit a malformed SQL statement that breaks
   String SQL = "INSERTED IN Employees " +
                "VALUES (107, 32, 'Kobe', 'Bryant')";
   stmt.executeUpdate(SQL);
   // If there is no error, commit the changes.
   conn.commit();

}catch(SQLException se){
   // If there is any error.
   conn.rollback(savepoint1);
}

在這種情況下,上述INSERT語句都不會成功,因為所有操作都被回滾了。

為了更好的理解,建議學習研究保存點示例代碼。