我正在阅读 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.
我的第一个问题是:我应该调用 PooledConnection.close() 吗?如果我是对的,我不想关闭物理连接,我只想检查(释放它)到它的池的物理连接。
第二个问题:我不明白为什么我需要对
PooledConnection.getConnection()
返回的对象调用Connection.close()
如果您查看示例:PooledConnection example仅调用
Connection.close()
方法,但不调用PooledConnection.close()
。请发表评论。根据官方文档: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/