JDBC對事務的支援

2021-08-28 02:39:31 字數 1323 閱讀 4334

事務要滿足四個條件: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...