1. 程式人生 > >conn.setAutoCommit(false);設定事物手動提交

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);
}
}

truesql命令的提交(commit)由驅動程式負責

falsesql命令的提交由應用程式負責,程式必須呼叫commit或者rollback方法