Autocommit不会一直发生

时间:2015-02-05 10:21:48

标签: java mysql jdbc

我试图更改自动提交状态,并根据条件稍后更新。但是在10次中,数据没有被提交,因为自动提交状态正在改变一些方式。我无法弄清楚如何。

我已在下面附上我的代码。

removeEmployee(){
        conn = DbManager.getConnection();
        conn.setAutoCommit(false);
        stat = conn.createStatement();
        int updated = stat.executeUpdate(updateSql);
        if (updated > 0) {
            boolean credit = isCreditPeding();
            System.out.println("Is Credit:"+credit);
            if(credit){
                System.out.println("Condition"+!conn.getAutoCommit());
                if (!conn.getAutoCommit()) {
                    conn.setAutoCommit(false);
                    conn.commit();
                }
                conn.setAutoCommit(true);
                return true;
            }else{
                conn.rollback();
                conn.setAutoCommit(true);
            }
        }
    }

Result (During error)
Is Credit:true
condition:false

isCreditPending()方法中未修改连接。即使我正在呼叫setAutocommit(true),也不会提交记录。

1 个答案:

答案 0 :(得分:1)

  

即使我正在调用setAutocommit(true),也不会提交记录。

不会。您必须显式提交它,因为您已在方法的开头将autoCommit设置为false。

removeEmployee(){
        boolean committed = false;
        conn = DbManager.getConnection();
        boolean initValue = conn.getAutoCommit(); //save the initial value
        conn.getAutoCommit(false); //explicitly set it to false to control the transaction
        stat = conn.createStatement();
        int updated = stat.executeUpdate(updateSql);
        if (updated > 0) {
            boolean credit = isCreditPeding();
            System.out.println("Is Credit:"+credit);
            if(credit){
                con.commit();//explicitly commit
                committed = true;
            }else{
                conn.rollback();//explicitly rollback
            }              
        }              
    }
    con.setAutoCommit(initValue);
    return committed;