【发布时间】:2023-03-27 04:06:01
【问题描述】:
在JDBC文献中我经常遇到sn-ps之类的
void databaseCall() {
Connection con = null;
Statement statement = null
try {
con = getConnection(...);
statement = con.createStatement(...);
// do some query
} catch (SQLException e) {
// bla bla
} finally {
try {con.close();} catch (Exception e1) {}
try {statement.close();} catch (Exception e1) {}
}
}
我知道明确关闭连接和语句是最佳实践,但在这种情况下,显然资源 con 和 statement 将在方法完成时关闭,即当 try 块完成时. finally 块中的 close 语句真的有必要吗?即使我们没有显式释放资源,当方法完成时它们不会以任何方式关闭吗?
【问题讨论】:
-
您应该将
close()调用放入finally块中。是的,如果您没有正确关闭资源,即使客户端程序已经完成,一些 DBMS 也会保留一些东西。 -
@G.Z.类似于您的疑问正在解释here