【问题标题】:Connection.close vs. PooledConnection.closeConnection.close 与 PooledConnection.close
【发布时间】:2011-12-04 23:20:14
【问题描述】:

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

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: java jdbc connection connection-pooling


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你别无选择。你所拥有的只是某个实现 Connection 的类的对象,它有一个 close() 方法。所以叫吧。无需决定。 'An application programmer does not use the PooledConnection interface directly'.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多