Java中為什么使用事務?什么時候使用事務?如何使用事務?


一、為什么使用事務?

  直白一點說,就是為了給自己后悔葯吃。

  因為對於數據庫的操作,是持久性的,所以我需要謹慎對待,如果沒有滿足條件,對數據庫的操作就會失效,也就是給自己一次反悔的機會,潑出去的水還可以收回來

二、什么時候使用事務?

  場景一:如果實際的業務中,需要將一條數據同事存放到兩張表中, 並且要求兩張表中的數據同步,那么此時就需要使用事務管理機制,保證數據同步。如果出現錯誤情況,比如表一插入數據成功,表二插入數據失敗,那么就回滾,終止數據持久化操作。

  場景二:金融行業的軟件開發嚴格重視事務處理,比如我們常見的轉賬操作,一方的賬戶金額減少,對應的是另一方的賬戶金額增加,這個過程需要使用到事務機制,不然轉賬不能成功

三、如何使用事務?

(一)JDBC處理事務

  

 1 public static void main(String[] args) throws SQLException, ClassNotFoundException {
 2         Class.forName("com.mysql.jdbc.Driver");
 3         String url = "jdbc:mysql://localhost:3306/user";
 4         String user = "root";
 5         String password = "123456";
 6         Connection con = (Connection) DriverManager.getConnection(url, user, password);
 7         try {
 8             //取消自動提交
 9             //如果設成false,那就是JDBC不自動提交,需要手動的使用commit或者rollback來進行提交或者回滾數據. 
10             con.setAutoCommit(false);
11             Statement stmt = (Statement) con.createStatement();
12             //進行數據插入
13             String sql = "insert into users(email,password) values('" + "jack@163.com" + "','" + "jack" + "');";
14             boolean flag = stmt.execute(sql);
15             System.out.println(flag);
16             //人為制造一個錯誤,結果就是數據庫並沒有插入這條數據,也就是數據發生了回滾
17             //異常被捕獲之后,就不在執行下面的語句,而是執行catch中的語句
18             //如果沒有異常,數據就會被提交到數據庫
19             System.out.println(1/0);
20             //手動提交
21             con.commit();
22         } catch (Exception e) {
23             //如果發生錯誤,就回滾
24             con.rollback();
25         } finally {
26             con.close();
27         }
28     }

 

(二)Spring處理事務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM