一、為什么使用事務?
直白一點說,就是為了給自己后悔葯吃。
因為對於數據庫的操作,是持久性的,所以我需要謹慎對待,如果沒有滿足條件,對數據庫的操作就會失效,也就是給自己一次反悔的機會,潑出去的水還可以收回來
二、什么時候使用事務?
場景一:如果實際的業務中,需要將一條數據同事存放到兩張表中, 並且要求兩張表中的數據同步,那么此時就需要使用事務管理機制,保證數據同步。如果出現錯誤情況,比如表一插入數據成功,表二插入數據失敗,那么就回滾,終止數據持久化操作。
場景二:金融行業的軟件開發嚴格重視事務處理,比如我們常見的轉賬操作,一方的賬戶金額減少,對應的是另一方的賬戶金額增加,這個過程需要使用到事務機制,不然轉賬不能成功
三、如何使用事務?
(一)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處理事務