基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
javax.sql.PooledConnection
更新时间:2026-07-22 17:45:59
javax.sql.PooledConnection 是由连接池创建的连接接口。
描述
javax.sql.PooledConnection 为连接池管理提供 Hook 的对象。PooledConnection 对象表示到数据源的物理连接。当应用程序完成连接时,连接可以被回收而不是被关闭,从而减少了需要建立的连接数量。
应用程序员不直接使用 PooledConnection 接口,而是由管理连接池的中间层基础设施使用。
当应用程序调用 DataSource.getConnection 方法时,会返回一个 Connection 对象。如果正在进行连接池连接,则该 Connection 对象实际上是 PooledConnection 对象的句柄,该对象是一个物理连接。
连接池管理器(通常是应用程序服务器)维护一个 PooledConnection 对象池。如果池中有可用的 PooledConnection 对象,则连接池管理器返回一个 Connection 对象,该对象是该物理连接的句柄。如果没有可用的 PooledConnection 对象,连接池管理器将调用 ConnectionPoolDataSource 方法 getPoolConnection() 来创建新的物理连接。实现 ConnectionPoolDataSource 的 JDBC 驱动程序创建一个新的 PooledConnection 对象并返回一个句柄给它。
当应用程序关闭连接时,它会调用 Connection 的 close() 方法。当连接池完成时,连接池管理器会收到通知,因为它已使用 ConnectionPool 的 addConnectionEventListener() 方法将自己注册为 ConnectionEventListener 对象。连接池管理器停用 PooledConnection 对象的句柄并将 PooledConnection 对象返回到连接池,以便它可以再次使用。因此,当应用程序关闭其连接时,底层物理连接将被回收而不是被关闭。
对于调用 PoolConnection.getConnection 返回的逻辑句柄,如果连接池管理器包裹或提供相应的代理,则当连接池管理器关闭或将 PooledConnection 返回到池以响应应用程序时,池管理器必须执行以下操作之一调用 Connection.close():
在逻辑连接句柄上调用
endRequest()在逻辑连接句柄上调用
close()
在连接池管理器调用 PooledConnection 的 close() 方法之前,物理连接不会关闭。通常在有序关闭服务器,或者发生致命错误使连接无法使用时调用此方法。
连接池管理器通常也是语句池管理器,维护 PreparedStatement 对象池。当应用程序关闭 Prepared Statement 时,它会调用 PreparedStatement 的 close() 方法。因为它已使用 ConnectionPool 的 addStatementEventListener() 方法将自己注册为 StatementEventListener 对象,所以当语句池完成时,池管理器会收到通知。因此,当应用程序关闭其 PreparedStatement 时,底层准备好的语句将被回收而不是被关闭。
方法
| 方法名 | 返回值类型 | Oracle 模式是否支持 | MySQL 模式是否支持 |
|---|---|---|---|
| getConnection() | Connection | 是 | 是 |
| close() | void | 是 | 是 |
| addConnectionEventListener(ConnectionEventListener listener) | void | 是 | 是 |
| removeConnectionEventListener(ConnectionEventListener listener) | void | 是 | 是 |
| addStatementEventListener(StatementEventListener listener) | void | 是 | 是 |
| removeStatementEventListener(StatementEventListener listener) | void | 是 | 是 |