当连接返回池时,BONECP(或任何其他池)是否关闭连接语句?据我了解,它不称为实际连接的关闭方法,因此没有自动说明关闭。那么,它是否以其他任何方式关闭语句,还是需要手动关闭它们?

有帮助吗?

解决方案

JDBC规范尚不清楚在正常连接下应发生什么,因此,无论您使用的池,都应该 总是 确保手动关闭陈述。考虑一下,如果您将来选择切换到另一个不会做您期望为您做的事情,请考虑您的应用程序会发生什么。

关于BONECP,答案是否定的,它不会为您关闭您的陈述,尽管如果您忘记了您的连接,它可以配置为关闭连接。这是出于绩效原因,因为如果您关闭连接,一些JDBC驱动程序将在内部关闭任何仍处于内部活跃的语句。

但是,如果您启用了语句,则BONECP将关闭任何缓存的语句。

编辑:从v0.8.0开始,添加了支持以关闭未封闭的语句(+打印出堆栈的位置的堆栈跟踪,如果需要,请打开语句的位置)。

其他提示

BONECP(0.8.0 -RC3),有2个可能的结果,

关闭一些仅用于非接近声明的配置

无论您如何为缓存语句配置如何配置) 即使您明确调用statement.close()。

有一个SpatementCache类来缓存准备序列和CallableStatement。默认值已禁用。您需要使用> 0参数来调用Bonecpconfig.setStatatementCachesize()以启用它。启用缓存后,

1 bonecp.statement.close()如果被缓存,将绕过基础语句的关闭。

  public void close() throws SQLException {
      this.connectionHandle.untrackStatement(this);
  this.logicallyClosed.set(true);
  if (this.logStatementsEnabled){
        this.logParams.clear();
        this.batchSQL = new StringBuilder();
      }

      if (this.cache == null || !this.inCache){ // no cache = throw it away right now
           this.internalStatement.close();
  }
}

2 bonecp.connection.close()将简单地通过函数“ clearStatementCaches()”清除缓存

好消息是MySQL JDBC驱动程序,Connector/J,当您通过函数“ CloseAllopenStatements()”关闭连接时,将关闭所有打开的语句。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top