當Jdbc程序向數據庫得到一個Connection對象時,默認狀況下這個Connection對象會自動向數據庫提交在它上面發送的SQL語句。若想關閉這種默認提交方式,讓多條SQL在一個事務中執行,而且保證這些語句是在同一時間共同執行的時,咱們就應該爲這多條語句定義一個事務。java
其中,銀行轉帳這一事例,最能說明,使用事務的重要性了。sql
update from account set money=money-100where name=‘a’;數據庫
update from account set money=money+100 wherename=‘b’;spa
由於這時,兩個帳戶的增減變化是在一塊兒執行的。現實生活中這種相似於同步通訊的例子還有不少,這裏,再也不贅述。code
固然,對於事務的編寫,也是要遵照必定的順序的:orm
首先,.設置事務的提交方式爲非自動提交:對象
conn.setAutoCommit(false);事務
接下來,.將須要添加事務的代碼放入try,catch塊中。get
而後,.在try塊內添加事務的提交操做,表示操做無異常,提交事務。同步
conn.commit();
尤爲不要忘記,.在catch塊內添加回滾事務,表示操做出現異常,撤銷事務:
conn.rollback();
這樣,經過簡單的幾步,咱們就能夠完成對事務處理的編寫了。
例:定義了一個事務方法並在方法內實現了語句之間的一致性操做
Connection con =null; Statement st=null; ResultSet rs=null; PreparedStatement ps=null; publicvoid startTransaction(){ con = DBCManager.getConnect();//獲取鏈接對象 try { //設置事務的提交方式爲非自動提交: con.setAutoCommit(false); //將須要添加事務的代碼一同放入try,catch塊中 //建立執行語句 String sql ="delete from me where id = 7"; String sql1 = "update me set name ='chengong' ,age ='34' where id =4"; //分別執行事務 ps = con.prepareStatement(sql); ps.executeUpdate(); ps = con.prepareStatement(sql1); ps.executeUpdate(); //在try塊內添加事務的提交操做,表示操做無異常,提交事務。 con.commit(); } catch (SQLException e) { try { //.在catch塊內添加回滾事務,表示操做出現異常,撤銷事務: con.rollback(); } catch (SQLException e1) { // TODO Auto-generatedcatch block e1.printStackTrace(); } e.printStackTrace(); }finally{ DBCManager.release(rs, ps, con); } }