2015-09-27 74 views
-1

我正在创建一个具有多个屏幕的Java独立应用程序。如何退出应用程序使用Java回滚数据

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

所有工作正常。但问题是,如果用户在中间退出应用程序,我应该可以通过所有存储过程对ROLLBACK数据进行修改。

任何人都可以请帮我回滚数据。提前致谢。

+0

这取决于你的设计。你是否在每一次成功交易之后做出承诺? – user2953113

回答

1

你必须关闭自动提交了,做你自己提交/回滚:

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

如果try块正常完成,所有的工作承诺。如果“做功”会抛出异常,则所有内容都会回滚。

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(); 
    } 
}