Module java.sql
Package javax.sql

Interface PooledConnection

已知的所有子接口:
XAConnection

public interface PooledConnection
一个提供连接池管理钩子的对象。一个PooledConnection对象代表与数据源的物理连接。当应用程序使用完连接后,可以将连接回收而不是关闭它,从而减少需要建立的连接数量。

应用程序员不直接使用PooledConnection接口;而是由管理连接池的中间层基础设施使用。

当应用程序调用方法DataSource.getConnection时,会得到一个Connection对象。如果正在进行连接池管理,那么该Connection对象实际上是一个指向PooledConnection对象的句柄,即一个物理连接。

连接池管理器,通常是应用服务器,维护一组PooledConnection对象。如果连接池中有可用的PooledConnection对象,连接池管理器会返回一个指向该物理连接的Connection对象句柄。如果没有可用的PooledConnection对象,连接池管理器会调用ConnectionPoolDataSource方法getPoolConnection来创建一个新的物理连接。实现ConnectionPoolDataSource的JDBC驱动程序会创建一个新的PooledConnection对象并返回一个句柄。

当应用程序关闭连接时,会调用Connection方法close。当进行连接池管理时,连接池管理器会被通知,因为它已经注册自己作为ConnectionEventListener对象,使用ConnectionPool方法addConnectionEventListener。连接池管理器会停用指向PooledConnection对象的句柄,并将PooledConnection对象返回到连接池中,以便可以再次使用。因此,当应用程序关闭其连接时,底层物理连接会被回收而不是被关闭。

如果连接池管理器包装或提供了从调用PoolConnection.getConnection返回的逻辑句柄的代理,则当连接池管理器关闭或将PooledConnection返回到池中以响应应用程序调用Connection.close时,连接池管理器必须执行以下操作之一:

  • 在逻辑Connection句柄上调用endRequest
  • 在逻辑Connection句柄上调用close

直到连接池管理器调用PooledConnection方法close,物理连接才会被关闭。通常会调用此方法以有序关闭服务器或如果致命错误使连接无法使用。

连接池管理器通常也是语句池管理器,维护一组PreparedStatement对象。当应用程序关闭准备好的语句时,会调用PreparedStatement方法close。当进行Statement池管理时,连接池管理器会被通知,因为它已经注册自己作为StatementEventListener对象,使用ConnectionPool方法addStatementEventListener。因此,当应用程序关闭其PreparedStatement时,底层准备好的语句会被回收而不是被关闭。

自版本:
1.4
  • Method Details

    • getConnection

      Connection getConnection() throws SQLException
      创建并返回一个Connection对象,该对象是代表此PooledConnection对象的物理连接的句柄。当应用程序调用方法DataSource.getConnection且没有可用的PooledConnection对象时,连接池管理器会调用此方法。有关更多信息,请参阅接口描述
      返回:
      一个Connection对象,该对象是此PooledConnection对象的句柄
      抛出:
      SQLException - 如果发生数据库访问错误
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自版本:
      1.4
    • close

      void close() throws SQLException
      关闭此PooledConnection对象代表的物理连接。应用程序永远不会直接调用此方法;它是由连接池模块或管理器调用的。

      有关更多信息,请参阅接口描述

      抛出:
      SQLException - 如果发生数据库访问错误
      SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
      自版本:
      1.4
    • addConnectionEventListener

      void addConnectionEventListener(ConnectionEventListener listener)
      注册给定的事件监听器,以便在此PooledConnection对象上发生事件时通知它。
      参数:
      listener - 一个组件,通常是连接池管理器,已实现ConnectionEventListener接口并希望在连接关闭或出现错误时得到通知
      参见:
    • removeConnectionEventListener

      void removeConnectionEventListener(ConnectionEventListener listener)
      从将在此PooledConnection对象上发生事件时通知的组件列表中移除给定的事件监听器。
      参数:
      listener - 一个组件,通常是连接池管理器,已实现ConnectionEventListener接口并已在此PooledConnection对象上注册为监听器
      参见:
    • addStatementEventListener

      void addStatementEventListener(StatementEventListener listener)
      使用此PooledConnection对象向其注册一个StatementEventListener。希望在连接创建的PreparedStatement被关闭或检测到无效时得到通知的组件可以使用此方法在此PooledConnection对象上注册一个StatementEventListener
      参数:
      listener - 一个实现了StatementEventListener接口的组件,将要在此PooledConnection对象上注册
      自版本:
      1.6
    • removeStatementEventListener

      void removeStatementEventListener(StatementEventListener listener)
      从将在驱动程序检测到PreparedStatement已关闭或无效时通知的组件列表中移除指定的StatementEventListener
      参数:
      listener - 一个实现了StatementEventListener接口的组件,先前已在此PooledConnection对象上注册
      自版本:
      1.6