仅在不处于自动提交模式时回滚和提交
Posted
技术标签:
【中文标题】仅在不处于自动提交模式时回滚和提交【英文标题】:rollback and commit only when not in auto-commit mode 【发布时间】: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
方法毫无用处。
【参考方案1】:
当启用自动提交时,回滚方法根本没有效果。
【讨论】:
以上是关于仅在不处于自动提交模式时回滚和提交的主要内容,如果未能解决你的问题,请参考以下文章