2017-06-01 100 views
0

javadoc for Connection#rollback明確指出:回滾和提交,只有當沒有自動提交模式

此方法只應使用時自動提交模式已被禁用。

對於commit方法存在類似的警告。

然而,看代碼,例如,在Apache commons DbUtils我只看到:

public static void rollback(Connection conn) throws SQLException { 
     if (conn != null) { 
      conn.rollback(); 
     } 
} 

這似乎不可思議有一個效用函數只防範NPE和省略測試自動提交模式。我本來期望大意如下的內容:

public static void rollback(Connection conn) throws SQLException { 
    if (conn != null) { 
     final boolean autoCommit = (boolean) conn.getAutoCommit(); 
     if (!autoCommit) 
      DbUtils.rollback(conn); 
    } 
} 

在javadoc的警告(當自動提交模式已禁用rollback只應調用)在實踐中實際觀察到的,如果是這樣,爲什麼會一個成功的JDBC庫不會打擾它?

+2

推理是,如果你還沒有禁用autoCommit,爲什麼你在代碼中調用'DbUtils.rollback(..)'或'DbUtils.commit(..)',如果你打電話給他們顯然是你應該注意的一個錯誤。老實說,現代試用資源,我發現很多'DbUtils'方法很無用。 –

回答

0

啓用auto-comit後,回滾方法根本無效。