【发布时间】:2017-11-02 18:47:07
【问题描述】:
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 库不理会它?
【问题讨论】:
-
原因是,如果你没有禁用 autoCommit,你为什么还要在你的代码中调用
DbUtils.rollback(..)或DbUtils.commit(..),如果你打电话给他们,那显然是一个错误,你应该注意。老实说,鉴于现代 try-with-resources,我发现很多DbUtils方法毫无用处。
标签: java jdbc apache-commons-dbutils