2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

JAVA用JDBC來(lái)Rollback

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

JDBC中如何正確的處理事務(wù)?
1。如果需要保持一些操作的原子性,比如轉(zhuǎn)帳就需要原子性,那么必須要將這些操作放在一個(gè)事務(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。如果不需要處理原子性的操作,比如查詢(xún) (SELECT),那么只需要conn.setAutoCommit(true);做就可以了。

 

也可以這樣, 其實(shí)都一樣的.

 

  1. java.sql.Connection conn = null;  
  2. try {  
  3.     //創(chuàng)建你的dataSource   
  4.     //...   
  5.     //獲取數(shù)據(jù)庫(kù)連接   
  6.     conn = dataSource.getConnection();  
  7.     System.out.println("jdbc connection init");  
  8.      
  9.     //開(kāi)始事務(wù),配置不自動(dòng)提交   
  10.     conn.setAutoCommit(false);  
  11.      
  12.     //執(zhí)行sql語(yǔ)句   
  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ù)庫(kù)   
  20.     if (conn != null) {  
  21.         try {  
  22.             //數(shù)據(jù)庫(kù)回滾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. }  

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多