Java:ResultSet关闭策略,除了最终关闭它

时间:2010-01-04 09:52:21

标签: java database oracle jdbc cursors

我正面临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 个答案:

答案 0 :(得分:6)

你还没有说过你的finally块在哪里,但是如果它在while循环之外,那么是的,具有未闭合的结果集。 rs1变量将引用所提取的“最新”结果集 - 因此这是唯一将被关闭的结果集。这里没有什么神奇的东西 - 它只是变量的正常行为。

我建议您将每个“获取结果集并将其使用”大小写分离到自己的方法中,并在该方法中的try / finally块中关闭结果集。这将使相当清楚的是发生了什么。