Java的事務處理,若是對數據庫進行屢次操做,每一次的執行或步驟都是一個事務.若是數據庫操做在某一步沒有執行或出現異常而致使事務失敗,這樣有的事務被執行有的就沒有被執行,從而就有了事務的回滾,取消先前的操做.....sql
詳細說明
編輯數據庫
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 name='zhangsan'
update account set monery=monery+1000 where name='lisi'
這個兩條語句必須做爲一個完成的事務來處理。只有當兩條都成功執行了,才能提交這個事務。若是有一句失敗,整個事務必須撤消。
在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等模式概念,請閱讀相關資料