【问题标题】:Should I close ResultSet after each query or close it after doing all my queries?我应该在每次查询后关闭 ResultSet 还是在完成所有查询后关闭它?
【发布时间】:2011-11-03 19:19:54
【问题描述】:

假设我要执行 10 个查询。 我像这样创建一个 ResultSet rs1:

ResultSet rs1 = MyStatement.executeQuery(QUERY_1);
while (rs1.next()){
    // do something
}
rs1.close();

rs1 = MyStatement.executeQuery(QUERY_2);
while (rs1.next()){
    // do something
}
rs1.close();

执行 QUERY_1 后,我关闭 rs1,然后将其分配给执行 QUERY_2,然后再次关闭它。现在我想知道 - 我可以在执行第 10 个查询后立即执行所有 10 个查询并关闭一次 rs1,还是在每次执行查询后都必须打开和关闭它?

提前谢谢你。

【问题讨论】:

    标签: sql jdbc


    【解决方案1】:

    您应该关闭每个实例以避免内存泄漏。

    您会看到,尝试加载几个巨大的结果集,直到垃圾收集器确定释放了哪个实例,您将遇到内存使用量过多的问题。

    【讨论】:

    • 不仅是内存“泄漏”。根据 JDBC 实现,游标可能会在 DBMS 内保持打开状态,这也可能会导致一些问题(持有锁,...)。因此,与文件或网络连接一样,确实在不再需要任何结果集时显式关闭它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2020-12-31
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    相关资源
    最近更新 更多