java事務處理

java事務處理

Java的事務處理,如果對資料庫進行多次操作,每一次的執行或步驟都是一個事務.如果資料庫操作在某一步沒有執行或出現異常而導致事務失敗,這樣有的事務被執行有的就沒有被執行,從而就有了事務的回滾,取消先前的操作.....

簡介

Java的事務處理,如果對資料庫進行多次操作,每一次的執行或步驟都是一個事務.如果資料庫操作在某一步沒有執行或出現異常而導致事務失敗,這樣有的事務被執行有的就沒有被執行,從而就有了事務的回滾,取消先前的操作.....

詳細說明

Java中使用事務處理,首先要求資料庫支持事務。如使用MySQL的事務功能,就要求MySQL的表類型為Innodb才支持事務。否則,在Java程式中做了commit或rollback,但在資料庫中根本不能生效。

JavaBean中使用JDBC方式進行事務處理

public int delete(int sID) {

dbc = new DataBaseConnection();

Connection con = dbc.getConnection();

try {

con.setAutoCommit(false);// 更改JDBC事務的默認提交方式

dbc.executeUpdate("delete from xiao where ID=" + sID);

dbc.executeUpdate("delete from xiao_content where ID=" + sID);

dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID);

con.commit();//提交JDBC事務

con.setAutoCommit(true);// 恢復JDBC事務的默認提交方式

dbc.close();

return 1;

}

catch (Exception exc) {

con.rollBack();//回滾JDBC事務

exc.printStackTrace();

dbc.close();

return -1;

}

}

在資料庫操作中,一項事務是指由一條或多條對資料庫更新的sql語句所組成的一個不可分割的工作單元。只有當事務中的所有操作都正常完成了,整個事務才能被提交到資料庫,如果有一項操作沒有完成,就必須撤消整個事務。

例如在銀行的轉帳事務中,假定張三從自己的帳號上把1000元轉到李四的帳號上,相關的sql語句如下:

update account set monery=monery-1000 where

update account set monery=monery+1000 where

這個兩條語句必須作為一個完成的事務來處理。只有當兩條都成功執行了,才能提交這個事務。如果有一句失敗,整個事務必須撤消。

在connection類中提供了3個控制事務的方法:

(1) setAutoCommit(Boolean autoCommit):設定是否自動提交事務;

(2) commit();提交事務;

(3) rollback();撤消事務;

在jdbc api中,默認的情況為自動提交事務,也就是說,每一條對資料庫的更新的sql語句代表一項事務,操作成功後,系統自動調用commit()來提交,否則將調用rollback()來撤消事務。

在jdbc api中,可以通過調用setAutoCommit(false) 來禁止自動提交事務。然後就可以把多條更新資料庫的sql語句做為一個事務,在所有操作完成之後,調用commit()來進行整體提交。倘若其中一項 sql操作失敗,就不會執行commit()方法,而是產生相應的sqlexception,此時就可以捕獲異常代碼塊中調用rollback()方法撤消事務。

事務處理是企業套用需要解決的最主要的問題之一。J2EE通過JTA提供了完整的事務管理能力,包括多個事務性資源的管理能力。但是大部分套用都是運行在單一的事務性資源之上(一個資料庫),他們並不需要全局性的事務服務。本地事務服務已然足夠(比如JDBC事務管理)。

事務的特性

Atomic原子性、Consistency一致性、Isolation隔離性和Durability持久性。

原子性:指整個事務是不可以分割的工作單元。只有事務中所有的操作執行成功,才算整個事務成功,事務中任何一個SQL語句執行失敗,那么已經執行成功的SQL語句也必須撤銷,資料庫狀態應該回到執行事務前的狀態。

一致性:指資料庫事務不能破壞關係數據的完整性以及業務邏輯上的一致性。例如對於銀行轉賬事務,不管事務成功還是失敗,應該保證事務結束後兩個轉賬賬戶的存款總額是與轉賬前一致的。

隔離性:指的是在並發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。

持久性:指的是只要事務成功結束,它對資料庫所做的更新就必須永久保存下來。即使發生系統崩潰,重新啟動資料庫系統後,資料庫還能恢復到事務成功結束時的狀態。

本文並不討論應該採用何種事務處理方式,主要目的是討論如何更為優雅地設計事務服務。僅以JDBC事務處理為例。涉及到的DAO,Factory,Proxy,Decorator等模式概念,請閱讀相關資料

相關詞條

相關搜尋

熱門詞條

聯絡我們