JDBC對事務的使用(包括自動提交,回滾等知識)

jopen 10年前發布 | 60K 次閱讀 JDBC Java開發

   首先得清楚什么時候使用事務。 
   當你需要一次執行多條SQL語句時,可以使用事務。通俗一點說,就是,如果這幾條SQL語句全部執行成功,則才對數據庫進行一次更新,如果有一條SQL語句執行失敗,則這幾條SQL語句全部不進行執行,這個時候需要用到事務。 
   其次才是事務的具體使用。 
1.獲取對數據庫的連接(代碼這里省略了吧,網上太多了,對各種數據庫的連接的都有) 
2.設置事務不自動提交(默認情況是自動提交的)   

conn.setAutoCommit(false);  //其中conn是第一步獲取的隨數據庫的連接對象。

 3.把想要一次性提交的幾個sql語句用事務進行提交  </p> </span>

Statement stmt = null; 
     stmt = conn.createStatement(); 
     stmt.executeUpdate(sql1); 
     stmt.executeUpdate(Sql2); 
     conn.commit();   //使用commit提交事務

4.捕獲異常,進行數據的回滾(回滾一般寫在catch塊中) 

catch(Exception e) 
    { 
        ... 
        try 
        { 
           conn.rollback(); 
        } catch(Exception e) 
        {...} 
     }

5.把事務再改成自動提交(默認狀態) 

conn.setAutoCommit(true);
解答各種疑問 
1.回滾的目的是什么呢? 
目的是使得sql1,sql2。。。等操作要么全部執行成功,要么全部執行不成功,這也是為什     么把這幾個sql語句當成一個事務來處理的目的。 
2.回滾從哪里開始回滾,我如何控制回滾的起始點。 

其實是可以設置存儲點的 

Savepoint piont = conn.setSavepoint(); 
   conn.rollback(point);

如果你沒有設置存儲點,他會回滾到你設置禁止事務自動提交的時候,因為你是先設置禁止自動提交的,再進行executeUpdate(sql)的,所以他會回滾到你的所有執行的這幾個sql語句前的狀態。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!