一、什麼是Java事務
通常的觀念認為,事務僅與資料庫相關。
事務必須服從ISO/IEC所製定的ACID原則。 ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫。事務的原子性表示事務執行過程中的任何失敗都會導致事務所所做的任何修改失效。一致性表示當交易執行失敗時,所有被該交易影響的資料都應該恢復到事務執行前的狀態。隔離性表示在事務執行過程中對資料的修改,在事務提交之前對其他事務不可見。持久性表示已提交的資料在交易執行失敗時,資料的狀態都應該正確。
通俗的理解,事務是一組原子操作單元,從資料庫角度說,就是一組SQL指令,要麼全部執行成功,若因為某個原因其中一條指令執行有錯誤,則撤銷先前執行過的所有指令。更簡答的說就是:要麼全部執行成功,要麼撤銷不執行。
既然事務的概念從資料庫而來,那麼Java事務是什麼?之間有什麼關聯?
實際上,一個Java應用系統,如果要操作資料庫,則透過JDBC來實現的。增加、修改、刪除都是透過對應方法間接來實現的,事務的控制也隨之轉移到Java程式碼中。因此,資料庫操作的事務習慣上就稱為Java事務。
二、為什麼需要事務
事務是為解決資料安全操作提出的,事務控制其實就是控制資料的安全存取。有一個簡單例子:例如銀行轉帳業務,帳戶A要將自己帳戶上的1000元轉到B帳戶下面,A帳戶餘額首先要減去1000元,然後B帳戶要增加1000 元。假如在中間網路出現了問題,A帳戶減去1000元已經結束,B因為網路中斷而操作失敗,那麼整個業務失敗,必須做出控制,要求A帳戶轉帳業務撤銷。這才能確保業務的正確性,完成這個操走就需要事務,將A帳戶資金減少和B帳戶資金增加方到一個事務裡面,要么全部執行成功,要么操作全部撤銷,這樣就保持了數據的安全性。
三、Java事務的類型
Java事務的類型有三種:JDBC事務、JTA(Java Transaction API)事務、容器事務。
1、JDBC事務
JDBC 交易是用Connection 物件控制的。 JDBC Connection 介面( java.sql.Connection )提供了兩種事務模式:自動提交和手動提交。 java.sql.Connection 提供了以下控制事務的方法:
public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
使用JDBC 事務界定時,您可以將多個SQL 語句結合到一個交易中。 JDBC 交易的一個缺點是交易的範圍侷限於一個資料庫連線。一個JDBC 事務不能跨越多個資料庫。