java - ORA-01000: 超出最大打开游标数 - Java 代码失败

标签 java oracle11g ora-01000

我在我的 Java 代码中使用循环将行插入到我的数据库中。然后,我得到了错误-

ORA-01000: maximum open cursors exceeded

我搜索了一下,发现在添加每一行后关闭准备好的语句或语句有助于消除错误。

但是,我需要明白——

  1. 什么是游标?
  2. 我可以更改光标的数量吗?如果是,这是一件好事吗?

最佳答案

This link将向您解释什么是游标及其工作原理。

是的,您可以使用以下语句更改 Oracle 上的最大游标数: ALTER SYSTEM SET OPEN_CURSORS=1337 SID='*' SCOPE=BOTH;

但是如果确实需要,您应该这样做。您真正应该做的是正确处理结果集和语句,并确保始终关闭它们。这通常应该在 try/finally 语句中完成。

如果您忘记关闭它们,打开的游标将泄漏,直到您达到最大限制(很快就会达到),并且后续请求将无法工作(您就是这种情况)。

您可以编辑您的问题并添加一些代码,以便我们可以向您展示一些提示,说明您可以如何以及在何处正确关闭结果集和语句。

这是典型的用法:

Statement stmt;
try {
   stmt = con.createStatement();
   // do something with the statement
} catch (SQLException e) {
   LOG.error("SQL error", e);
} finally {
   try { if (stmt != null) stmt.close(); } catch (SQLException se) { LOG.error("Error closing the statement", se); }
   // if using Apache utils you could do
   // IOUtils.closeQuietly(stmt);
}

结果集也是一样。根据您使用的 Java 版本,您可以使用 try-with-resources 习惯用法。

try (Statement stmt = con.createStatement()) {
   // do something with the statement
} catch(SQLException e) {
   LOG.error("SQL error", e);
}

Java 将负责关闭 try block 末尾的语句,因为 Statement 实现了 AutoCloseable 接口(interface)。

关于java - ORA-01000: 超出最大打开游标数 - Java 代码失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12138806/

相关文章:

java - Android 程序在调用 getStringArray 后崩溃

java - 如何通过测试 Java 中指定复杂程度的方法来检查代码覆盖率

java - "Passing arguments"通过 ThreadLocal 好吗?

SQL查找违反UNIQUE的行一起建立索引

oracle - Tridion CMS 和 Oracle : ORA-01000: maximum open cursors exceeded

java - 在 Netty 客户端上发送多个异步请求

sql - 将 Oracle 表限制为单行的简单约束

oracle - 使用 ALTER SESSION SET CURRENT_SCHEMA 后在 Oracle 表空间中创建索引

java - Spring 5.0.1 namedJdbcTemplate batchUpdate ORA-01000 : maximum open cursors exceeded