HI:我们有一些纯JDBC预处理语句,在执行查询后,我们处理结果集。但是,尽管我们关闭了声明,但我们从未关闭结果当一次又一次地执行这个准备好的声明时,例如,数百万次会发生内存泄漏吗?
答案 0 :(得分:1)
关闭语句应该允许结果集获取垃圾。但是,关闭语句将隐式关闭结果集,那么如何继续使用它呢?整个事件是否包含在try-catch-finally块中,它在finally块中将语句和结果集设置为null?
否则,如果抛出异常,可能会破坏连接,并且语句和结果集可能无法连接。即只要你保持愉快的一天情景一切都会好的,但如果一件事情出错,它可能会把一切都搞砸,因为缺少finally块重置为null可能会阻止垃圾收集并咀嚼你所有的资源(例如连接)
答案 1 :(得分:0)
理论上,关闭Statement应关闭ResultSet。但现实世界的做法是另一回事。
是的,有理由显式关闭ResultSet 对象(或使用新的try-with-resources语法关闭它们)。有关详细信息,请参阅this answer。 JDBC驱动程序,连接池和数据库中常见的设计限制和错误可能会导致问题。