在資料庫操作中,一項事務是指由一條或多條對資料庫更新的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()來撤消事務。可以通過調用setAutoCommit(false) 來禁止自動認可事務。然後就可以把多條更新資料庫的sql語句做為一個事務,在所有操作完成之後,調用commit()來進行整體提交。倘若其中一項sql操作失敗,就不會執行commit()方法,而是產生相應的sqlexception,此時就可以捕獲異常代碼塊中調用rollback()方法撤消事務。 Try{ Con = java.sql.DriverManager.getConnection(dburl , dbUser , dbPass); Con.setAutoCommit(false); Stmt = con.createStatement(); Stmt.executeUpdate(“update account set monery=monery-1000 where name=’zhangsan’”); stmt.executeUpdate(“update account set monery=monery+1000 where name=’lisi’”); con.commit(); }catch(Exception ex){ ex.printStackTrace(); try{ con.rollback(); }catch(Exception e){ e.printStackTrace(); } }finally{ try{ stmt.close(); con.close(); }catch(Exception e){ e.printStackTrace(); } }