
- JDBC 教程
- JDBC - 首頁
- JDBC - 簡介
- JDBC - SQL 語法
- JDBC - 環境
- JDBC - 示例程式碼
- JDBC - 驅動程式型別
- JDBC - 連線
- JDBC - 語句
- JDBC - 結果集
- JDBC - 資料型別
- JDBC - 事務
- JDBC - 異常
- JDBC - 批處理
- JDBC - 儲存過程
- JDBC - 流式資料
- JDBC - RowSet
- JDBC - 複製資料庫
- JDBC - ACID 屬性
- JDBC - 連線池
- JDBC 示例
- JDBC - 建立資料庫
- JDBC - 選擇資料庫
- JDBC - 刪除資料庫
- JDBC - 建立表
- JDBC - 刪除表
- JDBC - 插入記錄
- JDBC - 選擇記錄
- JDBC - 更新記錄
- JDBC - 刪除記錄
- JDBC - WHERE 子句
- JDBC - LIKE 子句
- JDBC - 資料排序
- JDBC 有用資源
- JDBC - 常見問題解答
- JDBC - 快速指南
- JDBC - 有用資源
- JDBC - 討論
- 有用 - Java 教程
JDBC - 事務
如果您的 JDBC 連線處於自動提交模式(預設情況下),則每個 SQL 語句在完成時都會提交到資料庫。
對於簡單的應用程式,這可能很好,但是您可能希望關閉自動提交併管理自己的事務,原因有三個:
提高效能。
維護業務流程的完整性。
使用分散式事務。
事務使您能夠控制是否以及何時將更改應用於資料庫。它將單個 SQL 語句或一組 SQL 語句視為一個邏輯單元,如果任何語句失敗,則整個事務失敗。
要啟用手動事務支援而不是 JDBC 驅動程式預設使用的自動提交模式,請使用 Connection 物件的setAutoCommit()方法。如果將布林值 false 傳遞給 setAutoCommit(),則關閉自動提交。您可以傳遞布林值 true 以將其重新開啟。
例如,如果您有一個名為 conn 的 Connection 物件,請編寫以下程式碼以關閉自動提交:
conn.setAutoCommit(false);
提交和回滾
完成後要提交更改,請在連線物件上呼叫commit()方法,如下所示:
conn.commit( );
否則,要回滾使用名為 conn 的 Connection 進行的資料庫更新,請使用以下程式碼:
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 語句都不會成功,並且所有內容都將回滾。
為了更好地理解,讓我們學習提交和回滾 - 示例程式碼。
使用儲存點
新的 JDBC 3.0 儲存點介面為您提供了額外的交易控制。大多數現代 DBMS 都支援其環境中的儲存點,例如 Oracle 的 PL/SQL。
設定儲存點時,您定義了事務中的一個邏輯回滾點。如果儲存點之後發生錯誤,您可以使用回滾方法撤消所有更改或僅撤消儲存點之後進行的更改。
Connection 物件有兩個新方法可幫助您管理儲存點:
setSavepoint(String savepointName) - 定義一個新的儲存點。它還會返回一個 Savepoint 物件。
releaseSavepoint(Savepoint savepointName) - 刪除儲存點。請注意,它需要一個 Savepoint 物件作為引數。此物件通常是 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, 20, 'Rita', 'Tez')"; stmt.executeUpdate(SQL); //Submit a malformed SQL statement that breaks String SQL = "INSERTED IN Employees " + "VALUES (107, 22, 'Sita', 'Tez')"; 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 語句都不會成功,並且所有內容都將回滾。
為了更好地理解,讓我們學習儲存點 - 示例程式碼。