Je fais face à ORA-01000: maximum de curseurs ouverts dépassés bien que je ferme les résultats en bloc final. Mais je soupçonne qu'il ya des problèmes avec mon code héritage, ci-dessous est mon pseudo-codeJava: stratégie de fermeture ResultSet, mise à part la fermeture
while (someCondition) {
rs1=executePreparedStatementNew(query1,param1,"");
//do something with rs1
rs1=executePreparedStatementNew(query2,param2,"");
}
- Si les boucles fonctionne 5 fois, combien de curseur sera ouvert par ce code?
- Si je ferme finalement rs1, combien de curseurs seront fermés, certains disent que l'instance de rs1 pour query1 ne sera pas fermée car elle est masquée par l'instance query2.
- Est-ce que les résultats sont masqués de cette façon? Dans ce cas, comment s'assurer que toutes les instances sont fermées.
Appréciez toute aide.
+1 pour "rien de magique ici". :-) –
Oui, mon bloc finally est en dehors de la boucle while. Je vais changer mon code pour utiliser le resultset séparé, mais juste par curiosité est-il de toute façon de fermer tous les résultats dans le code ci-dessus? Est-ce que ça va aider si je ferme rs1 avant de l'utiliser pour query2? –
@Ravi - oui un 'rs1.close()' explicite après avoir fini avec le premier ResultSet ferait l'affaire. (L'appel de 'close()' sur un ResultSet fermé est défini comme un no-op, donc vous n'avez pas à vous soucier des doubles fermetures dans le bloc 'finally' externe.) –