JDBC 事務(wù)

如果 JDBC 連接處于自動提交模式(默認(rèn)情況下為自動提交模式) ,那么每條 SQL 語句在完成時都會提交給數(shù)據(jù)庫。這對于簡單的應(yīng)用程序可能很好,但是出于以下三個原因,您可能想要關(guān)閉自動提交并管理自己的事務(wù)-

  • 為了提高性能。

  • 保持業(yè)務(wù)流程的完整性。

  • 使用分布式事務(wù)。

事務(wù)使您可以控制是否以及何時將更改應(yīng)用到數(shù)據(jù)庫。它將單個SQL語句或一組SQL語句視為一個邏輯單元,如果任何語句失敗,則整個事務(wù)都會失敗。

要啟用手動事務(wù)支持而不是JDBC驅(qū)動程序默認(rèn)使用的自動提交模式,請使用Connection對象的setAutoCommit()方法。如果將布爾值false傳遞給setAutoCommit( ),則會關(guān)閉自動提交功能。您可以傳遞布爾值true以再次將其重新打開。

例如,如果您有一個名為conn的Connection對象,請編寫以下代碼以關(guān)閉自動提交-

conn.setAutoCommit(false);

提交和回滾

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

conn.commit( );

否則,要回滾對使用名為 conn 的 Connection 進(jìn)行的數(shù)據(jù)庫更新,請使用以下代碼-

conn.rollback( );

以下示例說明了提交和回滾對象的用法-

try{
   //假設(shè)一個有效的連接對象conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String SQL = "INSERT INTO Employees  " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //提交格式錯誤的SQL語句,該語句會中斷
   String SQL = "INSERTED IN Employees  " +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // 如果沒有錯誤。
   conn.commit();
}catch(SQLException se){
   // 如果有任何錯誤。
   conn.rollback();
}

在這種情況下,上面的INSERT語句都不會成功,并且所有內(nèi)容都會回滾。

為了更好地理解,讓我們研究“commit示例代碼”。

使用Savepoint

新的JDBC 3.0 Savepoint接口為您提供了其他事務(wù)控制。大多數(shù)現(xiàn)代DBMS在其環(huán)境中都支持保存點,例如Oracle的PL / SQL。

設(shè)置保存點時,您可以在事務(wù)中定義邏輯回滾點。如果在保存點之后發(fā)生錯誤,則可以使用回滾方法撤消所有更改,或僅撤消在保存點之后進(jìn)行的更改。

Connection對象具有兩個新方法,可幫助您管理保存點-

  • setSavepoint(String savepointName):定義一個新的保存點。它還返回一個Savepoint對象。

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

rollback (String savepointName)方法可以將工作回滾到指定的保存點。

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

try{
   //假設(shè)一個有效的連接對象conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   //設(shè)置一個保存點
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1");
   String SQL = "INSERT INTO Employees " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //提交格式錯誤的SQL語句,該語句會中斷
   String SQL = "INSERTED IN Employees " +
                "VALUES (107, 22, 'Sita', 'Tez')";
   stmt.executeUpdate(SQL);
   // 如果沒有錯誤,請?zhí)峤桓摹?   conn.commit();

}catch(SQLException se){
   // 如果有任何錯誤。
   conn.rollback(savepoint1);
}

在這種情況下,上面的INSERT語句都不會成功,并且所有內(nèi)容都會回滾。

為了更好地理解,讓我們研究Savepoints-示例代碼。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清