事務要滿足四個條件:acid
原子性:乙個事務,要麼成功,要麼回滾(撤回)jdbc對dml語言的操作是預設提交的。當有多個dml操作時,我們應該取消自動提交 。改為手動提交 。一致性:事務開始前的資料要和結束後的資料保持一致。
隔離性:乙個事務正在進行,另外的事務要等待。
永續性:事務提交後,資料的改變是永久性的。
但是這麼做的原因是什麼呢?給大家舉個例子。
就說銀行轉賬的例子,如果銀行中有一筆錢在轉出的過程中發生了異常,並且是自動提交的話會產生什麼樣的後果呢?有以下方法:如果異常發生那麼就是銀行賬戶中這筆錢已經轉出,賬戶餘額變少了。但是收錢的賬戶卻沒收到錢,會產生這樣的後果。為了避免這樣的事情發生,所以我們需要取消自動提交改為手動提交,這樣的改變的結果就是,如果銀行發生了異常也不會提交給資料庫,資料庫中餘額並沒有發生改變,這也體現了事務的原子性,要麼成功,要麼回滾。
connection介面提供了乙個方法:
void setautocommit(boolean flag):用於設定是否自動提交
true:表示自動提交
false:表示取消自動提交
void commit(): 提交事務
void rollback():事務回滾
列舉乙個具體的轉賬的例子:
conn.setautocommit(false);//取消jdbc對事務的自動提交功能
1、轉出賬號先扣款
string updatesql = "update account_info1 set account_balence = ? where account_idcard = ?";
ps = conn.preparestatement(updatesql);
ps.setdouble(1, frommoney - money);
ps.setstring(2, fromaccount);
ps.executeupdate();
2、轉入賬戶增加金額
ps.setdouble(1, tomoney+money);
ps.setstring(2, toaccount);
ps.executeupdate();
map.put("message", "轉賬成功");
conn.commit();//手動提交事務
} catch (exception e) catch (sqlexception e1)
}
spring 對事務的支援
id txmanager class org.springframework.jdbc.datasource.datasourcetransactionmanager name datasource ref c3p0datasource bean bean id c3p0datasource cla...
Hibernate 對事務的支援
我們這裡只討論hibernate 對事務的支援,注意沒有涉及到spring 跟hibernate 整合這個問題將放到以後再討論。在hibernate 裡面也定義了乙個介面 transaction public void begin throws hibernateexception public i...
spring對事務支援的三種形式
spring對事務支援的三種形式 1 通過spring配置檔案進行切面配置 class org.springframework.jdbc.datasource.datasourcetransactionmanager 2 通過開始事務程式設計來開啟乙個事務 transactiontemplate t...