java和ibatis交易處理

來源:互聯網
上載者:User

        java和ibatis一樣,只要執行executeXXX()方法以後,預設自動認可事務,意味著每次調用executeXXX()方法,就是一個獨立事務,但對於有些情況,比如轉賬,但從一個賬戶上把錢扣掉(其實是邏輯上刪除了一條記錄),在另一個賬戶增加存款額(其實是修改了記錄),這2個操作應該是一個事務,要麼發生,要麼不發生,此時就應該把這2個操作定義為一個事務。

        1、java只要把事務操作設定為不自動認可,通過手動提交就能實現事務的處理,代碼如下:

      

package com.oracle;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;/** * java事務控制 * @author Administrator * */public class TestTrans {/** * @param args */public static void main(String[] args) {Connection ct = null;try{Class.forName("oracle.jdbc.driver.OracleDriver");ct = DriverManager.getConnection("jdbc:oracle:thin:@172.17.40.227:1521:orcl","scott","tiger");Statement sm = ct.createStatement();//加入交易處理ct.setAutoCommit(false);sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");//int i = 7/0;sm.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");;//提交事務ct.commit();}catch(Exception e){//如果發生異常就復原try{ct.rollback();}catch(Exception ex){ex.printStackTrace();}e.printStackTrace();}finally{    sm.close();    ct.close();}}}

      2、ibatis主要通過SqlMapClient類中的startTransaction()、commitTransaction()、endTransaction()、rollbackTransaction()這四個方法來實現事務的開始、提交、結束和回退。例子代碼如下:

private Reader reader = new Resources.getResourceAsReader(              "com/ibatis/example/sqlMapconfig.xml"); private SqlMapClient sqlMap = XmlSqlMapBuilder.buildSqlMap(reader); public updateItemDescription (String itemId, String newDescription) throws SQLException {     try {         sqlMap.startTransaction ();         Item item = (Item) sqlMap.queryForObject ("getItem", itemId);         item.setDescription (newDescription);         sqlMap.update ("updateItem", item);         sqlMap.commitTransaction ();    } finally {         sqlMap.endTransaction ();    } } 
 


注意:事務不能嵌套。在調用 commit()或 rollback()之前,從同一線程多次調用.startTransaction,將引起拋出例外。換句話說,對於每個 SqlMap 執行個體,每個線程最多隻
能開啟一個事務。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.