日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

JAVA用JDBC來Rollback

 閑來看看 2012-04-05
commit和rollback是數(shù)據(jù)庫事務(wù)的兩個概念。
一個數(shù)據(jù)庫事務(wù)有開始和結(jié)束邊界(boundary), 位于boundary的對數(shù)據(jù)庫的各種操作認為是對該事務(wù)的操作。
一個事務(wù)的要占用數(shù)據(jù)庫的一些資源,比如可能獲得數(shù)據(jù)庫的某個表的某條記錄的lock,如果一個事務(wù)長期占用資源而不去釋放,那么對其他的事務(wù)是不利的,可能會使得速度很慢。
所以對數(shù)據(jù)庫操作的正確做法是讓事務(wù)短小,只做一些應(yīng)該在事務(wù)里邊做的事情,以最快的速度讓一個事務(wù)結(jié)束,從而釋放該事務(wù)所占有的資源。
如何讓一個事務(wù)結(jié)束?commit或者rollback。兩者選其一,而且必選其一,才能夠確保一個事務(wù)被可靠的,安全的終止。commit意味著對事務(wù)中的操作確定,rollback意味著對事務(wù)中的操作否定。

JDBC中如何正確的處理事務(wù)?
1。如果需要保持一些操作的原子性,比如轉(zhuǎn)帳就需要原子性,那么必須要將這些操作放在一個事務(wù)中。
//Connection conn = ...;   
  1. boolean success = false;  
  2. try  
  3. {  
  4.     conn.setAutoCommit(false);  
  5.     //do something   
  6.     conn.commit();  
  7.     success = true;  
  8. }  
  9. catch(SQLException e)  
  10. {  
  11.     conn.rollback();  
  12.     success = false;  
  13. }  
  14. if(success)  
  15. //do something  



2。如果不需要處理原子性的操作,比如查詢 (SELECT),那么只需要conn.setAutoCommit(true);做就可以了。

 

也可以這樣, 其實都一樣的.

 

  1. java.sql.Connection conn = null;  
  2. try {  
  3.     //創(chuàng)建你的dataSource   
  4.     //...   
  5.     //獲取數(shù)據(jù)庫連接   
  6.     conn = dataSource.getConnection();  
  7.     System.out.println("jdbc connection init");  
  8.      
  9.     //開始事務(wù),配置不自動提交   
  10.     conn.setAutoCommit(false);  
  11.      
  12.     //執(zhí)行sql語句   
  13.     java.sql.Statement st = conn.createStatement();  
  14.     sql = "DELETE FROM user where userId=1";  
  15.     st.execute(sql);  
  16.      
  17.     //commit事務(wù)   
  18.     conn.commit();  
  19. }catch(Exception e) {   //異常處理,操作失敗之后回滾數(shù)據(jù)庫   
  20.     if (conn != null) {  
  21.         try {  
  22.             //數(shù)據(jù)庫回滾rollback   
  23.             conn.rollback();  
  24.             conn.commit();  
  25.         }catch(Exception ex) {  
  26.             System.out.println("MySQL Rollback Fail: " + e.getMessage());  
  27.         }  
  28.     }  
  29.     System.out.println("Delete Fail: " + e.getMessage());  
  30. }  

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多