2

我面临 ORA-01000:尽管我正在关闭 finally 块中的结果集,但已超出最大打开游标。但我怀疑我的遗留代码有问题,下面是我的伪代码

while (someCondition) {
rs1=executePreparedStatementNew(query1,param1,""); 
//do something with rs1
rs1=executePreparedStatementNew(query2,param2,""); 
}
  1. 如果循环运行 5 次,这段代码将打开多少个游标?
  2. 如果我最终关闭 rs1,将关闭多少个游标,有人说 query1 的 rs1 实例不会被关闭,因为它被 query2 实例屏蔽。
  3. 结果集真的会以这种方式被掩盖吗,如果是这样,如何确保所有实例都已关闭。

感谢任何帮助。

4

1 回答 1

6

你还没有说你的 finally 块在哪里,但是如果它在 while 循环之外,那么是的,你有未关闭的结果集。该rs1变量将引用获取的“最新”结果集 - 所以这是唯一将被关闭的结果集。这里没有什么神奇的事情——这只是变量的正常行为。

我建议您将每个“获取结果集并使用它”的情况分开到它自己的方法中,并在该方法内的 try/finally 块中关闭结果集。这将使发生的事情相当清楚。

于 2010-01-04T09:57:06.097 回答