java - Connection.close 与 PooledConnection.close

标签 java jdbc connection connection-pooling

我正在阅读 Java Data Access — JDBC、JNDI 和 JAXP,了解 Connection、PooledConnection 接口(interface)。据我了解, PooledConnection 返回的 Connection 表示“逻辑”连接。 PooledConnection - 本身代表“物理”。它们在关闭方面有什么区别?

Calling the close() method on a standard Connection object closes the physical connection. In contrast, calling the close() method on a logical Connection object returns the logical connection to the pool for other clients to use.

  1. 我的第一个问题是:我应该调用 PooledConnection.close() 吗?如果我是对的,我不想关闭物理连接,我只想检查(释放它)到它的池的物理连接。

  2. 第二个问题:我不明白为什么我需要对 PooledConnection.getConnection() 返回的对象调用 Connection.close()

  3. 如果您查看示例:PooledConnection example仅调用 Connection.close() 方法,但不调用 PooledConnection.close()。请发表评论。

  4. 根据官方文档:PooledConnection.close PooledConnection 实际上关闭了此 PooledConnection 对象表示的物理连接。但据我所知,连接池主要(主要目的之一) - 保持物理连接,而不关闭/创建它。根据文档,如果我运行 PooledConnection.close() 那么连接池将不得不重新创建它。你能不能也评论一下。

谢谢。

最佳答案

PooledConnection 通常只被容器直接使用,用于管理连接池。如果您正在编写一个容器或将提供与将完成实际工作的其他代码/库的连接的东西,您只需要处理这些。

JDBC 客户端使用标准的 java.sql.Connection 对象,用于实际执行数据库工作。此代码不应触及 PooledConnection,并且将由容器(例如 Java EE 容器或通过依赖项注入(inject))为其提供连接,或者将自己从 DataSource 或 DriverManager 创建连接。

关于java - Connection.close 与 PooledConnection.close,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720864/

相关文章:

java - SQL 条件原子插入

java - Android - 如何在服务重新启动时保留套接字连接

server - 无法在 Google Colab 上初始化服务器 : Could not connect: Connection refused. YOLO

java - 如何在多线程环境中访问PreparedStatement?

用于下载文件的 Java 类

java - Eclipse:编译 Java 1.5 插件: "Columns For Eclipse"

java - "=?"在 SQL 查询中使用时代表什么

java - 如果一类的一个实例的变量=x

java - Java Stream API 是如何选择执行计划的?

Java - 通信链路故障