何时在JDBC中关闭Connection,Statement,PreparedStatement和ResultSet

5Yr*_*DBA 30 java connection jdbc resultset

关于JDBC编码的几个问题:

  1. 对于单个客户端应用程序,我们是否需要连接池?
  2. 在开始时创建一个Connection并保持活着而不关闭它直到应用程序退出是一个好主意吗?为什么?
  3. PreparedStatement与Connection关联,如果我的连接在每次查询后没有关闭,为什么不保持PreparedStatement活着并在其他方法中重用它?
  4. 如果我们为每个查询创建PreparedStatement,数据库是否知道它是相同的PreparedStaement并在第一次之后忽略不必要的操作?
  5. PreparedStatement不会创建一次并重复使用多次语句?如果是的话,为什么每次都需要关闭它?

我知道对close()的调用会释放资源.但是如果我们知道我们稍后会使用它,为什么要释放它然后再请求它呢?

多客户端应用程序怎么样?我们需要连接池,所以我们每次都需要创建和关闭Connection,Statement和PreparedStatement?

谢谢,

tea*_*bot 14

我个人会使用一个池,因为这将为您处理所有的资源管理.如果您的连接要求发生变化,则可以轻松修改池配置.有了游泳池,您可以根据最佳实践打开/关闭连接和准备好的陈述,并将资源管理留在游泳池中.

通常,使用池时:

  • 关闭连接实际上只是将它返回到池中
  • 准备语句的行为将从Connection的语句缓存中检索先前准备的语句,或者如果一个语句不可用,则创建一个新语句并将其缓存以供以后使用.
  • 关闭PreparedStatement的行为实际上只是将它返回到连接的语句缓存.

此外 - 根据池实现 - 它可能能够在资源泄漏时通知您,从而更容易识别代码中的这些类型的问题.

看看像DBCP这样的示例实现的来源- 看看它们如何工作非常有趣.