JDBC編程之事務的使用教程


轉載請注明原文地址:http://www.cnblogs.com/ygj0930/p/5868750.html 

關於事務的理論知識、ACID特性等等,網上太多了,在此不一一重復。本文主要着重  事務  這個工具在實際編程中是怎么實現的。

 

在MySQL命令行的默認設置下,事務都是自動提交的,即執行SQL語句后就會馬上執行COMMIT操作,每一個SQL語句都被認為是一個完整的事務處理。

而我們想要實現事務,即:執行多句SQL語句,再最終一起提交或在出錯時撤銷(SQL語句要么提交,要么撤銷。提交則對數據庫造成永久性的影響,撤銷則事務內的sql語句相當於沒有執行)。

那么我們要做的就是:取消掉每一個SQL語句執行后自動提交這個屬性,並設立一個開關(commit())執行一些列語句的同一提交操作。

 

取消SQL語句自動提交的方法有:

con.setAutoCommit(false):取消自動提交。則從此處開始,下面的一系列SQL語句除非遇到commit()命令,都不提交。

 

具體的JDBC編程中事務的應用步驟如下:

    1) JDBC對事務的管理交由Connection,都是由Connection的對象方法實現的;

    2) 首先關閉自動提交,開啟事務:void Connection.setAutoCommit(false);  // false表示關閉自動提交

    3) 然后就是事務中包含的一系列SQL語句

    4) 提交事務:con.commit();  // 顯式提交

    5) 回滾:如果在事務執行過程中出錯(用try-catch語句捕捉),則在錯誤處理語句中顯式回滾:con.rollback();

    6) 中間點:一般的事務回滾是回滾到事務開始之前,但是也可以只回滾到事務中的某個中間點。

    設置中間點

         i. Savepoint Connection.setSavepoint();  // 在事務的某個位置設置一個中間點,該中間點沒有命名,使用系統默認的命名

         ii. Savepoint setSavepoint(String name);  // 給中間點命名

         iii. 回滾到指定的中間點:connection.rollback(Savepoint savepoint);  // 回滾到指定的中間點

 

代碼樣例:

 try {
       conn.setAutoCommit(false);
       String sql1="。。。";
       stmt.executeUpdate(sql);
       String sql2="。。。";
       stmt.executeUpdate(sq2);
       String sql3="。。。";
       stmt.executeUpdate(sq3);
       conn.commit();
       } catch (Exception e) {
            e.printStackTrace();
             try {
                 conn.rollback();
             } catch (SQLException e1) {
                 
                 e1.printStackTrace();
             }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM