回滚和提交,只有当没有自动提交模式
问题描述:
的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库不会打扰它?
答
启用auto-comit后,回滚方法根本无效。
推理是,如果你还没有禁用autoCommit,为什么你在代码中调用'DbUtils.rollback(..)'或'DbUtils.commit(..)',如果你打电话给他们显然是你应该注意的一个错误。老实说,现代试用资源,我发现很多'DbUtils'方法很无用。 –