JDBC中事務的使用

當Jdbc程序向數據庫得到一個Connection對象時,默認狀況下這個Connection對象會自動向數據庫提交在它上面發送的SQL語句。若想關閉這種默認提交方式,讓多條SQL在一個事務中執行,而且保證這些語句是在同一時間共同執行的時,咱們就應該爲這多條語句定義一個事務。java

    其中,銀行轉帳這一事例,最能說明,使用事務的重要性了。sql

    update from account set money=money-100where name=‘a’;數據庫

  update from account set money=money+100 wherename=‘b’;spa

由於這時,兩個帳戶的增減變化是在一塊兒執行的。現實生活中這種相似於同步通訊的例子還有不少,這裏,再也不贅述。code

     固然,對於事務的編寫,也是要遵照必定的順序的:orm

首先,.設置事務的提交方式爲非自動提交:對象

   conn.setAutoCommit(false);事務

接下來,.將須要添加事務的代碼放入try,catch塊中。get

 

而後,.在try塊內添加事務的提交操做,表示操做無異常,提交事務。同步

    conn.commit();

 

尤爲不要忘記,.在catch塊內添加回滾事務,表示操做出現異常,撤銷事務:

    conn.rollback();

這樣,經過簡單的幾步,咱們就能夠完成對事務處理的編寫了。

 

例:定義了一個事務方法並在方法內實現了語句之間的一致性操做

 

    Connection con =null;
     Statement st=null;
     ResultSet rs=null;
    PreparedStatement ps=null;
    publicvoid startTransaction(){
          
      con = DBCManager.getConnect();//獲取鏈接對象
             
             
                            try {
                  //設置事務的提交方式爲非自動提交:
              con.setAutoCommit(false);
              //將須要添加事務的代碼一同放入try,catch塊中
 
                  //建立執行語句
                  String sql ="delete from me where id = 7";
                  String sql1 = "update me set name ='chengong' ,age ='34' where id =4";
                  //分別執行事務
                  ps = con.prepareStatement(sql);
                  ps.executeUpdate();
                  ps = con.prepareStatement(sql1);
                  ps.executeUpdate();
                  
                  //在try塊內添加事務的提交操做,表示操做無異常,提交事務。
 
                  con.commit();
                 
              } catch (SQLException e) {
              try {
                  //.在catch塊內添加回滾事務,表示操做出現異常,撤銷事務:
                  con.rollback();
              } catch (SQLException e1) {
                  // TODO Auto-generatedcatch block
                  e1.printStackTrace();
              }
                  e.printStackTrace();
              }finally{
                  DBCManager.release(rs, ps, con);
              }
             
       }
相關文章
相關標籤/搜索