首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >出错后如何执行RollBack?

出错后如何执行RollBack?
EN

Stack Overflow用户
提问于 2016-08-12 18:50:10
回答 1查看 743关注 0票数 1

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

因此,如果数据被正确地保存在数据库setAutocommit=true上,我将构建首先保存数据的代码setAutocommit=false。

如果出现错误,则执行数据回滚。

所以代码是execute never error但不起作用,因为我尝试保存的数据有一个主键Integer自动递增,如果在下一次保存时出现错误,系统会跳过数字。

例如,如果我试图保存另一条记录CodiceFattura = 101,那么在我的数据库中,文件CodiceFattura = 100。现在,如果我有CodiceFattura = 100,我尝试保存,我有一个错误,我修复了错误,然后保存CodiceFattura = 102而不是101。

代码如下:

代码语言:javascript
运行
复制
 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();
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2016-08-12 18:56:50

这是与以下问题相同的问题:

COMMIT OR conn.setAutoCommit(true)

简而言之,您没有以正确的方式使用setAutoCommit,所以这种代码行为是正确的,您应该显式调用commit方法,或者让Auto Commit继续自动提交事务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38916177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档