2015-09-27 24 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(); 
    } 
}