【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】jdbc驱动版本2.4.3,ob版本5.7.25-OceanBase_CE-v4.2.1.0
【问题描述】使用oceanbase的jdbc驱动执行批量操作后关闭prepareStatement,实际上服务端并没有关闭,当创建的prepareStatement总数(包含使用jdbc执行过关闭操作的)超过数据库系统参数open_cursors配置的数量时,会出现 maximum open cursors exceeded 报错,这是否OB的bug,如何解决?
【复现路径】由于jdbc连接参数useCursorFetch=true(这个参数应用必须),驱动会设置useServerPrepStmts=true,cachePrepStmts参数则为默认值false,例如open_cursors配置为1000,每次执行批量操作都创建一个prepareStatement,完成批量操作后手动关闭,在创建完第1000个prepareStatement后执行commit操作就会报错
【附件及日志】
jdbc连接参数
批量操作代码
数据库open_cursors参数
报错堆栈