Connection.close与PooledConnection.close

时间:2011-10-11 02:42:01

标签: java jdbc connection connection-pooling

我正在阅读关于Java Data Access—JDBC, JNDI, and JAXP接口的Connection, PooledConnection。据我所知,Connection返回的PooledConnection表示“逻辑”连接。 PooledConnection - 本身代表“物理”。关于关闭他们之间有什么区别?

  

在标准Connection对象上调用close()方法将关闭   物理连接。相反,调用close()方法   logical Connection对象返回到池的逻辑连接   供其他客户使用。

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

  2. 第二个问题:我不明白为什么我需要在Connection.close()

  3. 返回的对象上调用PooledConnection.getConnection()
  4. 如果您查看示例:PooledConnection example仅调用Connection.close()方法,而不是PooledConnection.close()。请评论。

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

  6. 感谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你没有选择。你所拥有的只是一个实现Connection的类的对象,它有一个close()方法。所以称之为。没有必要的决定。 'An application programmer does not use the PooledConnection interface directly'.