【问题标题】:Do I need to close sql2o queries我需要关闭 sql2o 查询吗
【发布时间】:2021-02-24 01:08:03
【问题描述】:

几个月前,我了解到在使用java.sql.connection 时,我需要关闭PreparedStatementsResultSet 以防止内存泄漏,正如here 所解释的那样

然而,我最近开始与一个使用 org.sql2o.connection 的新团队合作,这是一个很好且有用的 jdbc 包装器,但我注意到他们通常不会关闭他们的 org.sql2o.Query 对象。

try(org.sql2o.Connection c = Sql2oObject.open()){
    //...some logic
    List<SomeClass> list = c.createQuery(sql).executeAndFetch(SomeClass.class);
    //...some more logic
}

如您所见,查询对象从未显式关闭。我认为关闭查询会更好:

try(org.sql2o.Connection c = sql2oObject.open();
    org.sql2o.Query q = c.createQuery(sql); ) {
    //...some logic
    List<SomeClass> list = q.executeAndFetch(SomeClass.class);
    //...some more logic
}

但我不确定这是否真的有必要。如果是,那么我已经发现了一个可能的重大泄漏,我将被视为天才,并被永远铭记。如果不是,那我只是一个要求进行不必要更改的人。

那么,你说什么哦,强大的 SO?有必要关闭吗?

【问题讨论】:

    标签: java jdbc garbage-collection sql2o


    【解决方案1】:

    实际上,您不必像使用 sql2o.connection 那样调用 close 方法,就像在 Java 中使用 try-with-resource 方法一样。

    它在 try-with-resource java 中的作用是编译器为您的代码添加 finally 语句,您希望显式关闭本机资源。否则,您必须在 finally 块内关闭 sql2o.connection。因为它是标准 jdbc connection 的 jdbc 包装器

    如果你想用 try-with-resource 关闭其他下划线资源,请在括号中声明它们。这样它将关闭下划线资源以及您的主要资源。 但是,在您的情况下,Query 不需要明确关闭,因为它始终是 sql2o.connection 的一部分

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 2021-06-29
      • 2010-10-19
      相关资源
      最近更新 更多