我正在阅读有关Java Data Access—JDBC, JNDI, and JAXP
接口的Connection, PooledConnection
。据我了解,Connection
返回的PooledConnection
表示“逻辑”连接。 PooledConnection
-本身代表“物理”。他们在结账方面有什么区别?
在标准Connection对象上调用close()方法将关闭
物理连接。相反,在
逻辑连接对象将逻辑连接返回到池中
供其他客户使用。
我的第一个问题是:我应该调用PooledConnection.close()吗?如果我是对的,我不希望物理连接关闭,我只想将物理连接检出(释放)到其池中。
第二个问题:我不明白为什么我需要在由Connection.close()
返回的对象上调用PooledConnection.getConnection()
如果看示例:PooledConnection example仅调用Connection.close()
方法,而不调用PooledConnection.close()
。请发表评论。
根据官方文档:PooledConnection.close PooledConnection实际上关闭了此PooledConnection对象表示的物理连接。但是据我了解,连接池的主要目的(主要目的之一)-保持物理连接,而无需关闭/创建连接。根据文档,如果我运行PooledConnection.close(),则连接池将不得不再次重新创建它。您能否也对此发表评论。
谢谢。
最佳答案
PooledConnection通常仅由容器直接使用,并用于管理连接池。仅在编写容器或将提供与实际工作的其他代码/库的连接的连接时,才需要处理这些问题。
标准java.sql.Connection对象由JDBC客户端使用,并用于实际执行数据库工作。该代码不应触及PooledConnection,并且将通过容器(例如Java EE容器或通过依赖项注入)为其提供连接,或者将自己从DataSource或DriverManager创建连接。