當jdbc程式向資料庫獲得乙個connection物件時,預設情況下這個connection物件會自動向資料庫提交在它上面傳送的sql語句。若想關閉這種預設提交方式,讓多條sql在乙個事務中執行,並且保證這些語句是在同一時間共同執行的時,我們就應該為這多條語句定義乙個事務。
其中,銀行轉賬這一事例,最能說明,使用事務的重要性了。
update from account set money=money-200 where name=『a』;
update from account set money=money+200 where name=『b』;
因為這時,兩個賬戶的增減變化是在一起執行的。
> 1; setautocommit(boolean autocommit) :設定是否自動提交事務
> 2; commit():提交事務
> 3; rollback():撤銷事務
首先,.設定事務的提交方式為非自動提交:
conn.setautocommit(false);
接下來,.將需要新增事務的**放入try,catch塊中。
然後,.在try塊內新增事務的提交操作,表示操作無異常,提交事務。
conn.commit();尤其不要忘記,.在catch塊內新增回滾事務,表示操作出現異常,撤銷事務:
conn.rollback();例子:
conn = jdbcutils.getconnection();
// 控制事務,關閉事務的自動提交
conn.setautocommit(false);
// 賬號轉出200
string sql = "update account set money = money-? where "+ "name=? and money>=200"
; pstmt1 = conn.preparestatement(sql);
// 設定引數
pstmt1.setdouble(1, amount);
pstmt1.setstring(2, outaccount);
pstmt1.executeupdate();
// 賬號轉入200
string sql2 = "update account set money=money+? where name=?"
; pstmt2 = conn.preparestatement(sql2);
pstmt2.setdouble(1, amount);
pstmt2.setstring(2, inaccount);
pstmt2.executeupdate();
// 提交事務
conn.commit();
system.out
.println("轉賬成功");
} catch (exception e) catch (sqlexception e1)
}
JDBC事務處理
原子性 atomicity 組成事務處理的語句形成了乙個邏輯單元,不能只執行其中的一部分。一致性 consistency 在事務處理執行前後,資料庫是一致的 兩個賬戶要麼都變,或者都不變 隔離性 isolcation 乙個事務處理對另乙個事務處理沒有影響。持續性 durability 事務處理的效果...
JDBC的事務處理
jdbc的事務處理 事務,也是資料庫事務,指的是作為單個邏輯工作單元執行的一系列操作。正常的情況下,操作應該順利進行,與操作相關的所有資料庫資訊也成功地更新 但是,如果在這一系列過程中任何乙個環節出了差錯,導致操作失敗了,資料庫中所有資訊都必須保持操作前的狀態不變。否則,資料庫的資訊將會一片混亂而不...
JDBC之事務處理
try catch 首先開啟事務,然後執行dml操作,如果所有的dml操作都正確執行,則使用commit提交事務 如果有的dml操作不能正確執行,則捕獲該異常,跳過commit語句,在catch語句塊中使用rollback回滾事務。public class test catch exception ...