我正在用Java构建一个应用程序,将数据存储到Mysql数据库中。
所以我正在构建代码,首先保存数据,setAutocommit=false,如果数据正确保存在数据库setAutocommit=true上。
如果有错误,执行数据回滚。
所以代码是execute never error,但不起作用,因为我试图保存的数据有一个主键Integer autoincrement,如果下次保存时出错,系统将跳转该数字。
例如,在我的数据库中,如果我试图保存另一个记录CodiceFattura=101,则字段CodiceFattura=100。如果我有CodiceFattura=100,我尝试保存,我有一个错误,我修正了错误,然后保存CodiceFattura=102而不是101。
这是代码:

 public boolean salvaFattura(String tipoFattura){
        fatturaIstanza= istanziaValori(null);
        boolean tuttoOk=false;
        try{
            setCommitManager(false);
            tuttoOk=modelManager.getFatturaManager().inserisciFatturaArticoliSenzaCodice(fatturaIstanza,tipoFattura);
            if(!tuttoOk){
                VisualMessageFattura.getErrore();
                eseguiRollBack();
            }
            Integer.parseInt(null);
            setCommitManager(true);
        }
        catch(Exception e){
            VisualMessage.getShowMessaggioErroreFatturaSalvata("Fattura");
            log.logStackTrace(e);
            eseguiRollBanck();
            return false;
        }
        return tuttoOk;
    }

    public void eseguiRollBanck(){
        try{
            modelManager.getFatturaManager().eseguiRollBack();
        }catch(Exception e){
            log.logStackTrace(e);
        }
        try{
            db.eseguiRollBack();
        }catch(Exception e){
            log.logStackTrace(e);
        }
    }

    public void setCommitManager(Boolean state){
        modelManager.getFatturaManager().setAutoCommit(state);
    }

    public void eseguiRollBack(){
            try {
                db.rollback();
            } catch (SQLException e) {
                log.logStackTrace(e);
                //VisualMessage.getErroreDB();
            }
        }

public void setAutoCommit(boolean autoCommit){
        try {
            db.setAutoCommit(autoCommit);
        } catch (SQLException e) {
            log.logStackTrace(e);
            VisualMessage.getErroreDB();
        }
    }

最佳答案

这与以下问题相同:
COMMIT OR conn.setAutoCommit(true)
简而言之,您没有以正确的方式使用setAutoCommit,因此此代码行为是正确的,您应该显式调用commit方法,或者让Auto Commit继续自动提交事务。

09-12 09:43