標籤:util pos 指令 ace strong comm 相關 getc log
事務一.
什麼是事務?
就是執行一組sql指令,這組sql指令要麼全部執行成功,只要有一個失敗,則全部失敗
二.事務的操作
注意:和事務操作相關的都是Connection 的方法
同一個事務需要同一個Connection實作類別對象
流程:
開啟事務:
con.setAutoCommit(false);//關閉自動認可
true 開啟自動認可
提交事務
con.commit();
復原事務
con.rollback();
轉賬小案例的分析:
2 try 3 { //開啟事務:之後系統會將以下所有的sql的執行當做一個整體 4 int i = update:-100 5 int j = update:+100 6 if(i > 0 && j > 0){ 7 //提交事務:當所有的sql指令都執行成功之後,提交事務-> 所有對資料庫的操作將永久生效,不可更改 8 System.out.println("轉賬成功!"); 9 }10 }catch (Exception e)11 {12 //復原事務:當你的事務中出現問題,沒有全部執行執行成功,則回顧事務,這樣之前對資料庫的所有操作就被撤銷13 }
代碼demo:
1 public class Demo { 2 public static void main(String[] args){ 3 Connection con=null; 4 try{ 5 QueryRunner qr = new QueryRunner(); 6 con=C3P0Utils.getConnection(); 7 //開啟事務 8 con.setAutoCommit(false); 9 int re1 = qr.update("update account set money=money-? where id=?",300,342);10 int re2 = qr.update("update account set money=money+? where id=?",300,345);11 if(re1>0&&re2>0){12 //都執行成功提交事務13 con.commit();14 }else{15 //執行失敗手動復原事務16 con.rollback();17 }18 }catch(Exception e){19 //發生異常復原事務20 try {21 con.rollback();22 } catch (SQLException e1) {23 // TODO Auto-generated catch block24 e1.printStackTrace();25 }26 }finally {27 try {28 //將串連放回串連池29 con.close();30 } catch (SQLException e) {31 // TODO Auto-generated catch block32 e.printStackTrace();33 }34 }35 }36 }
java學習筆記之事務