当前位置: 首页 > 知识库问答 >
问题:

我需要关闭sql2o查询吗

阎建华
2023-03-14

几个月前,我在使用java.sql时了解到了这一点。连接我需要关闭PreparedStatements和ResultSet,以防止内存泄漏,如下所述

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

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
}

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

那么,你怎么说?哦,真的吗?有必要关闭它们吗?

共有1个答案

钱建本
2023-03-14

实际上,您不必像使用sql2o那样调用close。连接,因为您正在使用Java中的“资源试用”方法

它在try with resource java中所做的是编译器为您的代码添加“finally”语句,您可以在其中显式关闭本机资源。否则必须关闭sql2o。finally块内的连接。因为它是围绕标准jdbc连接的jdbc包装

如果您也想用try with resource关闭其他下划线资源,请在括号中声明它们。这样它就会将下划线资源与主资源一起关闭。然而,在您的情况下,查询不需要显式关闭,因为它始终是连接的一部分

 类似资料:
  • 问题内容: 我有一个网站,它的点击率很高,我遇到了问题,JDCB连接错误。 我对关闭有点困惑,我需要关闭还是仅关闭就足够了。 另外,我需要关闭它吗? 问题答案: 是的,您必须关闭PreparedStatement和结果集,因为它们可能导致内存泄漏。有关更多信息,请访问 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

  • 我有一个网站,点击量很大。我遇到过一些问题,包括JDBC连接错误。 我对结束PreparedStatement有点困惑。我需要关闭PreparedStatement吗?还是只需要关闭语句就足够了? 另外,呢?我也需要关闭它吗?

  • 问题内容: 好吧,我可能也已在较早之前发布了此内容,但到目前为止仍找不到答案,因此请帮助我解决这个问题。 我的数据库结构: ATT (表) Act_ID(PK) Assigned_To_ID(FK,请参阅) Project_ID(FK,请参阅) Product_ID(FK,请参阅) 状态(可以是) 产品表 产品编号(PK) 产品名称 项目表 Project_ID(PK) 项目名 员工表 Emp_I

  • 问题内容: 我的代码是: 在文档中: InputStream的close方法不执行任何操作。 这是否意味着我不需要关闭InputStream? 问题答案: 您确实需要关闭输入Stream,因为您提到的方法返回的流实际上是FileInputStream或该文件的某个其他子类,该子类包含文件的句柄。如果不关闭此流,则可能会导致资源泄漏。

  • 我已经在我的应用程序中使用创建了线程池,以调用供应商Web服务,使用下面的代码。 我想知道我们是否需要关闭线程池之类的,基本上我不希望在正式生产环境中挂起线程。

  • 我在我的应用程序中保存了和的一个实例,每次我想执行一些操作时,我都会调用。 我想知道我是否需要显式关闭连接,就像JDBC中的一样。 要强调的是,我只有一个实例。我的问题不是关于关闭,而是关闭我相信它在调用时打开的连接。