为了账号安全,请及时绑定邮箱和手机立即绑定

JDBC Connection 的 rollback 方法在哪里调用?

JDBC Connection 的 rollback 方法在哪里调用?

动漫人物 2019-02-28 02:35:32
不带事务的代码是这样的(外层的try-catch已省略): Connection conn = getConnection(); try { Statement stmt = conn.createStatement(); stmt.executeUpdate(sql1); stmt.executeUpdate(sql2); } finally { conn.close(); } 如果要添加事务,rollback在哪里调用? 如果在catch中调用,那么捕获哪个异常?如果仅仅捕获SQLException,那么抛出其它异常的时候怎么办?如果捕获Exception,那么抛出的异常目前没法处理(例如RuntimeException)又怎么办? 如果在finally中调用,我怎么区分正常和异常情况?
查看完整描述

2 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

try (Connection conn = null) {
    conn.setAutoCommit(false);
    try (Statement stmt = conn.createStatement()) {
        stmt.executeUpdate(sql1);
        stmt.executeUpdate(sql2);
        conn.commit();
    } catch (SQLException | RuntimeException e) {
        e.printStackTrace();
        conn.rollback();
    }
} catch (SQLException e) {
    e.printStackTrace();
}

如果你觉得需要的话, 可以把RuntimeExceptionrollback了,但是上面的情况下,我觉得更应该考虑为什么会抛出RuntimeException

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 1288 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信