对于类似的代码,
try{
Connection con =....
Statement stmt = ....
ResultSet set = ...
}
catch(Exception e){
...
}
finally {
con.close();
}
鉴于连接进入连接池:
调用con.close()
时,它会进入连接池并保持活动状态。在某个时间点,这些连接是否正确关闭?在这种情况下,我们是否需要关闭结果集和stmt对象,因为连接最终会被关闭?
此外,是否存在可能仍在使用stmt / result set对象并导致连接池中的连接未关闭的情况?
答案 0 :(得分:1)
建议在不再需要资源时立即释放资源。
最简单的方法是使用新的try-with-resources功能(Java SE 7)。
答案 1 :(得分:1)
使用连接池时,Connection.close()
调用会将连接重新置于池中。致电Statement
时,系统会移除Connection.close()
个对象。但是,AFAIK,你必须关闭ResultSet
对象以明确地从服务器清除它们。这是一种始终明确关闭ResultSet
,Statement
而不依赖Connection.close()
的好方法。除此之外,如果您选择Spring JDBC
,它会照顾到管理JDBC资源。您不必担心关闭连接,语句和结果集。从Statement
API - 添加,当Statement对象关闭时,其当前的ResultSet对象(如果存在)也将关闭。