我正在阅读有关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创建连接。

08-26 09:40