超出最大游标 SQLException--配置问题或游标泄漏?
Posted
技术标签:
【中文标题】超出最大游标 SQLException--配置问题或游标泄漏?【英文标题】:Maximum Cursors exceeded SQLException-- Configuration problem or Cursor leak? 【发布时间】:2019-06-11 09:08:58 【问题描述】:我正在通过 Java 调用 SQL 过程。我在执行代码时在日志中收到 SQL 异常- java.sql.SQLException: ORA-01000: 超出最大打开游标
我已经经历过类似的问题并尝试过这个-
-
将 open_cursors 从 30000 增加到 40000。
关闭 try 和 finally 块中的语句。
但这并没有解决问题。我的代码有问题吗?
这是我的 Java 代码-
public static void buildingHelpContent(String p_id) throws Throwable
Connection conn = ExtractHP.getConnection();
CallableStatement cs = null;
log.debug("arguments for COMP.Help.build_hp_data p_id= "+p_id);
try
cs = conn.prepareCall("call COMP.Help.build_hp_data(?)");
cs.setString(1, p_id);
cs.execute();
if(cs!=null)
cs.close();
catch (SQLException e)
log = ExtractHP.getLogger();
log.debug("!!! Java Exception !!!\n");
log.error("Exception while executing the procedure for ID ...."+ p_id, e);
finally
if(cs!=null)
cs.close();
【问题讨论】:
我认为问题出在您的 sql 代码中。 既然您已经向finally
块添加了close
调用,我建议您从try
块中删除close
代码。正如@user7294900 所说,将if(conn!=null) conn.close();
添加到finally
块中。
this question 的答案可能对您有所帮助
嗨@BobJarvis 我添加了 conn.close();在 finally 块中。但现在低于异常:java.sql.SQLException: Closed Connection
【参考方案1】:
你没有关闭连接,你可以使用try-with-resources
块(不带finally
):
log.debug("arguments for COMP.Help.build_hp_data p_id= "+p_id);
try (Connection conn = ExtractHP.getConnection();
CallableStatement cs = conn.prepareCall("call COMP.Help.build_hp_data(?)"))
在 java 6 中也关闭finally
中的连接:
finally
if(cs!=null)
cs.close();
if(conn!=null)
conn.close();
【讨论】:
感谢您的回复。不幸的是,这段代码非常古老,并且是用 Java 1.6 编写的。不能使用 try-with-resources。 @RichaSharma 查看我的更新答案,将conn.close();
添加到finally
+1 为您的建议@user7294900。在 finally 块中添加 conn.close() 后,现在我得到了一个新异常: java.sql.SQLException: Closed Connection 使用 Throw 和 Throwable 的 Java 代码有什么问题吗?
@RichaSharma 我建议你用ExtractHP.getConnection()
中的代码打开一个新问题以上是关于超出最大游标 SQLException--配置问题或游标泄漏?的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException: ORA-01000: 超出打开游标的最大数
java.sql.SQLException: - ORA-01000: 超过最大打开游标
java.sql.SQLException: - ORA-01000: 超过最大打开游标
java.sql.SQLException: - ORA-01000: 超过最大打开游标