gpt4 book ai didi

Java + Oracle ORA-1000 超出最大打开游标数

转载 作者:行者123 更新时间:2023-12-01 22:47:05 25 4
gpt4 key购买 nike

我有一个多线程应用程序,其中主线程创建一些线程并将它们交给 ExecutorService。所有线程都使用主类中的 Oracle 数据库连接对象。数据库连接打开一次,其他线程中的所有方法都使用主数据库对象。

但是,一旦应用程序开始运行并处理记录,我发现打开的游标数量不断增加,直到 2000(我在 Oracle 中设置了此限制),然后导致 ORA-1000 消息,该消息不会消失,直到我重新启动应用程序。我正在关闭所有方法和语句的结果集,并且无法弄清楚为什么游标计数没有减少(即使当我运行单个线程时)

这是一种方法:

private boolean GetPending()
{
try {
String statement = "SELECT * FROM PENDING_REQUESTS WHERE REQUEST_ID = GET_PENDING()";
PreparedStatement query = DbConnection.prepareStatement(statement);
ResultSet rs = query.executeQuery();
while (rs.next()) {
MSISDN = rs.getInt(3);
SHORTCODE = rs.getInt(4);
MESSAGE = rs.getString(5);
return true;
}
rs.close();
query.close();
}
catch(SQLException e) {
LogWriter.Log("ID:"+ID+"\t\tError returning field: " + e.toString());
}
return false;
}

我还注意到,如果发生错误时释放连接,游标就会被释放。但是,我不想为每个新请求创建一个新连接,因为它会减慢整个应用程序的速度。

感谢任何帮助。谢谢

最佳答案

很少有问题:

您没有关闭连接。 最后关闭您的连接。

您没有关闭 rs 或查询 (+1 immibis)

您是否考虑过使用 Spring jdbc 模板?还要检查连接池。他们是你的 friend 。

关于Java + Oracle ORA-1000 超出最大打开游标数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25177460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com