2017-06-01 73 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后,回滚方法根本无效。