OceanBase 复用语句对象
OceanBase Connector/J 的语句池功能允许应用程序以与使用 Connection 对象相同的方式重用 PreparedStatement
对象。
多个逻辑连接可以以透明方式重用 PreparedStatement
对象。
使用 Pooled Statement
应用程序可以通过从 Statement
接口调用 isPoolable
方法来找出数据源是否支持语句池。如果返回值为 true
,则应用程序知道正在准备 PreparedStatement
对象。应用程序还可以通过使用 Statement 接口中的 setPoolable 方法来请求要合并或不合并的语句。
Pooled Statement 的重用对于应用程序应该是完全透明的,也就是说,无论 PreparedStatement
对象是否参与语句池,应用程序代码应保持相同。如果应用程序关闭了 PreparedStatement
对象,则必须调用 Connection.prepareStatement
方法进行重用。
关闭 Pooled Statement
应用程序关闭 Pooled Statement 的方式与关闭非 Pooled Statement 的方式完全相同。一旦语句被关闭,无论该语句是池中的还是非池中的,都不再供应用程序使用,如果尝试重用该语句会引发异常。唯一可见的区别是应用程序无法直接关闭正在池化的物理语句,而是由池管理器负责完成。PooledConnection.closeAll
方法关闭给定物理连接上打开的所有语句,从而释放与这些语句关联的资源。
关闭 Pooled Statement 的方法如下:
- close
此 java.sql.Statement 接口方法由应用程序调用。如果正在对该语句进行池化,则它将关闭该应用程序使用的逻辑语句,但不会关闭正在池化的物理语句。
- close
此 java.sql.Connection 接口方法由应用程序调用。此方法的行为根据使用该语句的连接是否被池化而有所不同。
- 非池化连接
此方法关闭物理连接以及该连接创建的所有语句。这是必需的,因为垃圾回收机制无法检测何时可以释放外部管理的资源。
- 池化连接
此方法关闭逻辑连接及其返回的逻辑语句,但打开基础的
PooledConnection
对象和所有关联的缓冲语句。
-
PooledConnection.closeAll
连接池管理器调用此方法以关闭
PooledConnection
对象所有正在池化的物理语句。