紙飛機

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            22 隨筆 :: 28 文章 :: 30 評論 :: 0 Trackbacks
          轉自:http://blog.csdn.net/sunyadongwanghbjm/archive/2007/08/20/1751518.aspx
          什么是事務:
          首先,說說什么事務。我認為事務,就是一組操作數據庫的動作集合。
          事務是現代數據庫理論中的核心概念之一。如果一組處理步驟或者全部發生或者一步也不執行,我們稱該組處理步驟為一個事務。當所有的步驟像一個操作一樣被完整地執行,我們稱該事務被提交。由于其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾到最初的系統狀態。
          事務必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫。事務的原子性表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。一致性表示當事務執行失敗時,所有被該事務影響的數據都應該恢復到事務執行前的狀態。隔離性表示在事務執行過程中對數據的修改,在事務提交之前對其他事務不可見。持久性表示當系統或介質發生故障時,確保已提交事務的更新不能丟失。持久性通過數據庫備份和恢復來保證。

          Java中的事務處理
          一般J2EE服務器支持三種類型的事務管理。即:JDBC事務,JTA事務,容器管理事務。
          最好不要在程序中同時使用上述三種事務類型;并且,事務要在盡可能短的時間內完成,不要在不同方法中實現事務的使用。下面舉兩個例子說明JDBC及JTA事務,容器管理事務是在特定的框架中實現的(如:Spring的事務管理)
          1. JDBC事務
          public String delete(String id) {
          String ID 
          = id;
           db 
          = new getConnection();
           Connection con 
          = db.getConnection();
           
          try {
          con.setAutoCommit(
          false);
          db.executeUpdate(
          "delete from helloworld where ID=" + ID); //更新操作1
            db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2
            db.executeUpdate("delete from helloworld_user where ID=" + ID); //更新操作3
            con.commit();//提交JDBC事務
            con.setAutoCommit(true); 
          db.close();
          return “success”;
           }

           
          catch (Exception e) {
            con.rollBack();
          //回滾JDBC事務
            e.printStackTrace();
          db.close();
          return “fail”;
            }

          }

           
          如上例:更新操作1,2,3只有當三步操作都成功完成才進行提交,否則回滾已經進行的操作。這樣,保證了數據的完整性,不會因為突然斷電等特殊情況導致的數據錯誤。
           
          2.JTA事務
          JTA是J2EE事務服務的解決方案、描述了J2EE模型事務接口。JTA具有三個主要的接口:UserTransaction、TransactionManager、Transaction接口。這些接口共享公共的事務操作,如:commit()、rollback()。同時各自也有自己的操作。舉例說明:
           
          public String delete(String id) {
           String ID 
          = id;
           db 
          = new getConnection();
           db.getConnection();
           UserTransaction transaction 
          = sessionContext.getUserTransaction();//獲得JTA事務
           try {
            transaction.begin(); 
          //開始JTA事務
            db.executeUpdate("delete from helloworld where ID=" + ID);
            db.executeUpdate(
          "delete from helloworld _book where ID=" + ID);
            db.executeUpdate(
          "delete from helloworld _user where ID=" + ID);
            transaction.commit(); 
          //提交JTA事務
            db.close();
            
          return”success”;
           }

           
          catch (Exception e) {
            
          try {
             transaction.rollback();
          //事務回滾
            }

            
          catch (Exception e) {
             e.printStackTrace();
            }

            exc.printStackTrace();
            db.close();
            
          return “fail”;
           }

          }
           
          3.容器事務管理
          在Spring、Hibernate等框架中都有各自的事務管理功能。雖然表現形式有些差別,但都是在JAVA事務管理的基礎上實現的。這里不進行介紹。
          posted on 2010-01-18 16:55 紙飛機 閱讀(773) 評論(0)  編輯  收藏 所屬分類: Spring

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 金昌市| 玉环县| 溧阳市| 阳朔县| 乐都县| 右玉县| 双辽市| 凉山| 邓州市| 墨脱县| 浑源县| 五河县| 万山特区| 苍南县| 华蓥市| 息烽县| 谢通门县| 牟定县| 康马县| 随州市| 京山县| 虎林市| 咸宁市| 汉寿县| 曲周县| 阿勒泰市| 绥江县| 抚顺县| 屏边| 松溪县| 财经| 上饶市| 平乡县| 三门峡市| 抚顺市| 东辽县| 灌南县| 广水市| 汝州市| 乐至县| 雷山县|