我已经完成了与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条记录。 我发现一些主题说应该更改配置,但我无法更改配置。
有没有其他方法可以解决此错误?
答案 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插入语句,该语句只需要解析一次并且不会使共享池混乱。您的数据库管理员会感谢您。