Oracle Open游标ora-1000错误,“超出最大打开游标数”。

时间:2013-10-04 09:51:41

标签: java database oracle cursor

我已经完成了与Oracle数据库的连接。 现在我正面临

ORA-01000: maximum open cursors exceeded

我使用代码插入数据:

public static void OracleJDBC(String Serial_Number, String Charged_MDN) {

     String dataInsertQuery = "insert into CDR_Huawei (Serial_Number, Charged_MDN) values ('" + Serial_Number + "', '" + Charged_MDN + "')";
     String dataSelectQuery = "select * from CDR_Huawei";
     Statement statement = null;

    try {
    statement = connection.createStatement();
    statement.execute(dataInsertQuery);
    //System.out.println("Data Inserted Successfully");

    } catch (SQLException e) {
            e.printStackTrace();
    }
   }

它仅适用于前500个记录,然后我有错误Ora-1000。 我总共有大约6000条记录。 我发现一些主题说应该更改配置,但我无法更改配置。

有没有其他方法可以解决此错误?

3 个答案:

答案 0 :(得分:3)

finally区块中关闭您的陈述。

try {
    statement = connection.createStatement();
    statement.execute(dataInsertQuery);
} catch (SQLException e) {
        e.printStackTrace();
} finally {
    if (statement != null) statement.close();
}

答案 1 :(得分:1)

每次编写时都会生成新的语句对象  statement = connection.createStatement()

最好在使用后关闭声明...

 statement.close(); after `statement.execute(dataInsertQuery);`

将解决您的问题。

答案 2 :(得分:0)

提请注意ppeterka评论的额外答案:

你真的应该在这里使用PreparedStatements。原因是您当前正在向数据库发送6000个唯一的SQL插入语句。这些语句是唯一的,因为insert语句的值粘贴在语句文本中。数据库必须解析每个唯一语句并将其放在共享池中以便重用。但它不会重复使用,因为它们是独一无二的。

使用在值中绑定的PreparedStatements,您将只创建一个唯一的SQL插入语句,该语句只需要解析一次并且不会使共享池混乱。您的数据库管理员会感谢您。