猿问

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

不带事务的代码是这样的(外层的try-catch已省略):

Connection conn = getConnection();
try {
    Statement stmt = conn.createStatement();
    stmt.executeUpdate(sql1);
    stmt.executeUpdate(sql2);
} finally {
    conn.close();
}

如果要添加事务,rollback在哪里调用?

  1. 如果在catch中调用,那么捕获哪个异常?如果仅仅捕获SQLException,那么抛出其它异常的时候怎么办?如果捕获Exception,那么抛出的异常目前没法处理(例如RuntimeException)又怎么办?

  2. 如果在finally中调用,我怎么区分正常和异常情况?

动漫人物
浏览 1289回答 2
2回答

哆啦的时光机

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(); } 如果你觉得需要的话, 可以把RuntimeException也rollback了,但是上面的情况下,我觉得更应该考虑为什么会抛出RuntimeException。
随时随地看视频慕课网APP

相关分类

Java
我要回答