云数据库OceanBase入门教程 OceanBase 复用语句对象

2024-02-26 开发教程 云数据库OceanBase入门教程 匿名 4

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