java - 出错后如何执行RollBack?

标签 java mysql rollback autocommit

我正在使用 Java 构建一个应用程序,将数据存储到 Mysql 数据库中。

所以我正在构建首先保存数据的代码,setAutocommit=false,如果数据正确保存在数据库中 setAutocommit=true。

如果有错误执行数据回滚。

因此代码执行时不会出错但无法正常工作,因为我尝试保存的数据具有主键整数自动增量,如果下次保存时出现错误,系统会跳转该数字。

例如,在我的数据库中,归档的 CodiceFattura = 100,如果我尝试保存另一条记录 CodiceFattura = 101。现在如果我有 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 以继续自动提交事务。

关于java - 出错后如何执行RollBack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38916177/

相关文章:

java - 使用注释修改方法

java - java中的不可见对象

Mysql单元格转换

mysql - 如何将这个Mysql转换为pdo

php - 在 PHP 中使用带有循环的 MySQL 事务时出现问题

spring-mvc - Spring集成测试不回滚

java - 在Eclipse中使用maven包

Java LinkedList 问题——如何删除满足特定条件的项

java - 如何在条件中使用带有总和的分组依据

PHP回滚方法失败