conn.setAutoCommit(false);設定事物手動提交
引數: autoCommit --》為 true表示啟用自動提交模式;為 false表示禁用該模式
預設的話為自動提交,每當執行一個update ,delete或者insert的時候都會自動提交到資料庫,無法回滾事務。
使用舉例:
ConnectionsqlManager = SQLManager.getConnection();
//一般來說不用setAutoCommit(true),因為大部分的驅動預設是true;
sqlManager.setAutoCommit(true);
Statement stmt = sqlManager.createStatement();
***********
***********
當涉及事務處理時將setAutoCommit(false);
然後事務完後commit一下
如果設定sqlManager.setAutoCommit(false);的話,則在語句正常執行完畢後需要用sqlManager.commit()手動提交,如果在執行語句時出錯的可以呼叫sqlManager.rollback()來回滾!
ConnectionsqlManager = SQLManager.getConnection();
//設定事物為手動提交;
sqlManager.setAutoCommit(false);
Statementstmt = sqlManager.createStatement();
*************
************
// 提交事物;
sqlManager.commit();
完整例子(新增角色,因為角色和賬號之間存在中間表,所以需要設定)
public void addRole(Role role, String[] menuIds) {
Connection conn = null;
try {
// 獲取資料庫連線物件
conn = C3P0Util.getConnection();
// 設定事物手動提交
conn.setAutoCommit(false);
// 新增角色基本資訊, 新增完成之後將新增角色ID設定到 role 物件當中,用於新增中間表時使用
roleDAO.add(role, conn);
// 新增角色選單關聯關係
roleDAO.addRoleToMenu(role.getId(), menuIds, conn);
// 提交事物;
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
C3P0Util.close(conn, null, null);
}
}
true:sql命令的提交(commit)由驅動程式負責
false:sql命令的提交由應用程式負責,程式必須呼叫commit或者rollback方法