2
在以下代码片段中,使用JDBC Connection和PreparedStatement进行Java 7异常处理?
1)在调用“conn.close()”(通过AutoClose)之前,try-catch块是否自动调用“conn.rollback()”? 如果不是,我是否必须在该块中添加finally { conn.rollback(); }
?
2)Connection对象传递给bar()方法的方式,它的try-catch方法是否正确?
public void foo() {
try (Connection conn = datasource.getConnection()) {
bar(conn, "arg");
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void bar(Connection conn, String args) throws SQLException {
try (PreparedStatement ps = conn.prepareStatement("SOME_QUERY")) {
// Do something
ps.executeUpdate();
} catch (SQLException err) {
throw err;
}
}
感谢anwer.sorry我忘了在foo()中添加commit()。bar()方法中创建的PreparedStatement何时关闭? –
在链接中说:“注意:try-with-resources语句可以像普通的try语句一样捕获并最终阻塞。在try-with-resources语句中,任何catch或finally块都在资源声明后运行已关闭。“那么我应该在哪里调用“conn.rollback()”?我在调用“conn.close()”后无法调用它,可以吗? –
你说得对,我搞混了。但是,由于您无法访问catch或finally块中的尝试(包括资源)中创建的对象,因此在这种特定情况下这并不相关。 (我删除了我以前的评论,所以我不会混淆别人,链接是:http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) –