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

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

Connection conn = getConnection;
try { Statement stmt = conn.createStatement; stmt.executeUpdatesql1; stmt.executeUpdatesql2;
} finally { conn.close;
}

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

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

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

  1. Exception无法捕获RuntimeException的吗?

  2. JDBC你只需要处理SQLException即可

  3. JDK1.7之后一个catch块可以处理多个异常

try { // ...
} catchSQLException | RuntimeException e { conn.rollback; throw e;
}

try Connection conn = null { conn.setAutoCommitfalse; try Statement stmt = conn.createStatement { stmt.executeUpdatesql1; stmt.executeUpdatesql2; conn.commit; } catch SQLException | RuntimeException e { e.printStackTrace; conn.rollback; }
} catch SQLException e { e.printStackTrace;
}

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注