Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果退出应用程序,如何使用Java回滚数据_Java_Mysql_Stored Procedures_Jdbc_Rollback - Fatal编程技术网

如果退出应用程序,如何使用Java回滚数据

如果退出应用程序,如何使用Java回滚数据,java,mysql,stored-procedures,jdbc,rollback,Java,Mysql,Stored Procedures,Jdbc,Rollback,我正在创建一个Java独立应用程序,它有多个屏幕 我正在执行许多由许多DML语句组成的存储过程 一切正常。但问题是,如果用户在中间退出应用程序,我应该能够回滚所有存储过程中所修改的数据。 谁能帮我回滚数据吗。提前谢谢 您必须关闭“自动提交”,并执行自己的提交/回滚: try (Connection conn = DriverManager.getConnection(url)) { conn.setAutoCommit(false); try { // do wo

我正在创建一个Java独立应用程序,它有多个屏幕

我正在执行许多由许多DML语句组成的存储过程

一切正常。但问题是,如果用户在中间退出应用程序,我应该能够回滚所有存储过程中所修改的数据。
谁能帮我回滚数据吗。提前谢谢

您必须关闭“自动提交”,并执行自己的提交/回滚:

try (Connection conn = DriverManager.getConnection(url)) {
    conn.setAutoCommit(false);
    try {
        // do work
        conn.commit();
    } finally {
        conn.rollback();
    }
}
如果
try
块正常完成,则提交所有工作。若“DoWork”抛出异常,则所有内容都将回滚

commit()
之后,finally块仍将调用
rollback()
,但是由于在
commit()
之后没有发生任何事情,因此这是一个禁止操作。如果您不喜欢这样做,可以改为:

try (Connection conn = DriverManager.getConnection(url)) {
    conn.setAutoCommit(false);
    boolean commit = false;
    try {
        // do work
        commit = true;
    } finally {
        if (commit)
            conn.commit();
        else
            conn.rollback();
    }
}

这取决于你的设计。您是否在每笔成功交易后都提交佣金?