【发布时间】:2012-03-04 20:00:19
【问题描述】:
如何将创建/接收连接、查询数据库和可能处理结果的常见 JDBC 习惯用法与 Java 7 的自动资源管理、try-with-resources 语句集成? (Tutorial)
在 Java 7 之前,通常的模式是这样的:
Connection con = null;
PreparedStatement prep = null;
try{
con = getConnection();
prep = prep.prepareStatement("Update ...");
...
con.commit();
}
catch (SQLException e){
con.rollback();
throw e;
}
finally{
if (prep != null)
prep.close();
if (con != null)
con.close();
}
使用 Java 7,您可以:
try(Connection con = getConnection(); PreparedStatement prep = con.prepareConnection("Update ..."){
...
con.commit();
}
这将关闭Connection 和PreparedStatement,但是回滚呢?我无法添加包含回滚的 catch 子句,因为该连接仅在 try 块中可用。
您仍然在 try 块之外定义连接吗?这里的最佳做法是什么,尤其是在使用连接池的情况下?
【问题讨论】:
-
我不会在这些情况下使用自动关闭。正如该术语已经指出的那样,它仅用于关闭资源。顺便说一句:将连接放在
try...块之外将无济于事,因为由于连接已关闭,您无法在 try 块之后回滚。 -
@Raedwald:不,这不是重复的。这里是关于 con.rollback() 的。
标签: java jdbc java-7 try-with-resources