1. 程式人生 > 實用技巧 >事務處理

事務處理

事務:

具備一致性、原子性、隔離性

為了多條語句繫結生效,所以設定預設不提交,執行結束後統一提交

只要在提交前出現異常,則出現異常之前執行過的語句也不會產生資料持久化,因為資料還沒有提交

在過程中產生異常,需要將資料返回值操作之前,需要設定一個回滾點,但不是必須的,然後在出現異常時,啟動回滾

設定回滾點:

  Savepoint point = con.setSavepoint();

啟動回滾:

 //回滾事務:一般都是不需要設定回滾點的,因為會讓其直接回到執行前的原點
 con.rollback();
 //根據設定的回滾點位置,進行事務回滾
 con.rollback(point);
/**
 * 事務處理
 * 事務具備原子性和持久化的特性
 *
 * 能夠將多條增刪改語句作為一個整體一起提交,完成持久化
 * 如果其中有任意一條執行失敗,整個事務都將會回滾
 
*/ public class Demo9 { public static void main(String[] args)throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/geekhome", "root", "tjhilu"); //將事務的自動提交方法更改為手動提交 con.setAutoCommit(false);
//設定回滾點 Savepoint point = con.setSavepoint(); PreparedStatement pstmt = con.prepareStatement("update account set balance=balance-200 where cardid=1"); pstmt.executeUpdate(); if(true){ //回滾事務 //con.rollback(); //根據設定的回滾點位置,進行事務回滾 con.rollback
(point);
throw new RuntimeException("轉賬失敗"); }
PreparedStatement pstmt2
= con.prepareStatement("update account set balance=balance+200 where cardid=2"); pstmt2.executeUpdate(); //提交事務:為了多條語句繫結生效,所以設定預設不提交,執行結束後統一提交 con.commit(); pstmt.close(); con.close(); } }