日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDBC编程专题9之JDBC事务

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC编程专题9之JDBC事务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

- ?提高性能

- ?保持業務流程的完整性

- ?使用分布式事務

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

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



1、提交和回滾

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

conn.commit(?);

- ?否則,要使用連接名為conn的數據庫回滾更新,使用以下代碼:

conn.rollback();

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

try{//Assume?a?valid?connection?object?connconn.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?breaksString?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語句不會成功執行,因為所有操作都被回滾了。



2、使用保存點

- ?新的JDBC3.0新添加了Savepoint接口提供了額外的事務控制能力。大多數現代DBMS支持其環境中的保存點,如Oracle的PL/SQL。

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

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

- ?saveSavepoint(String savepointName):定義新的保存點,它還返回了一個Savepoint對象。

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

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

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

try{//Assume?a?valid?connection?object?connconn.setAutoCommit(false);Statement?stmt?=?conn.createStatement();//set?a?SavepointSavepoint?savepoint1?=?conn.setSavepoint("Savepoint1");String?SQL?=?"INSERT?INTO?Employees?"?+"VALUES?(106,?24,?'Curry',?'Stephen')";stmt.executeUpdate(SQL);??//Submit?a?malformed?SQL?statement?that?breaksString?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語句都不會成功,因為所有操作都被回滾了。

轉載于:https://blog.51cto.com/12402717/1980448

總結

以上是生活随笔為你收集整理的JDBC编程专题9之JDBC事务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。