JDBC編程之事務的使用教程

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

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

 

在MySQL命令行的默認設置下,事務都是自動提交的,即執行SQL語句後就會立刻執行COMMIT操做,每個SQL語句都被認爲是一個完整的事務處理。數據庫

而咱們想要實現事務,即:執行多句SQL語句,再最終一塊兒提交或在出錯時撤銷(SQL語句要麼提交,要麼撤銷。提交則對數據庫形成永久性的影響,撤銷則事務內的sql語句至關於沒有執行)。編程

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

 

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

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

 

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

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

    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();
             }
相關文章
相關標籤/搜索