2
我正面臨ORA-01000:儘管我正在關閉finally塊中的結果集,但超出了最大打開遊標。但我懷疑有一些麻煩我的遺留代碼,下面是我的僞代碼Java:ResultSet關閉策略,除了最後關閉之外
while (someCondition) {
rs1=executePreparedStatementNew(query1,param1,"");
//do something with rs1
rs1=executePreparedStatementNew(query2,param2,"");
}
- 如果循環運行5次,有多少光標將通過這段代碼被打開?
- 如果我最後關閉rs1,將關閉多少個遊標,有人說query1的rs1實例不會被關閉,因爲它被query2實例屏蔽。
- 結果集是否真的被這種方式掩蓋,如果是的話,如何確保所有的實例都關閉。
感謝任何幫助。
+1「沒有什麼不可思議的東西在這裏」。 :-) – 2010-01-04 10:12:27
是的,我的finally塊在while循環之外。我將更改我的代碼以使用單獨的結果集,但出於好奇,無論如何要關閉上述代碼中的所有結果?如果我在將它用於query2之前關閉rs1,它會有幫助嗎? – 2010-01-04 10:14:59
@Ravi - 在完成第一個ResultSet之後,顯式的'rs1.close()'可以做到這一點。 (在關閉的ResultSet中調用'close()'被定義爲no-op,所以你不必擔心外部'finally'塊中的double關閉。) – 2010-01-04 11:28:18