复用语句对象

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 对象所有正在池化的物理语句。