Únik bude největším problémem s otevřeným kurzorem.
ORA-01000: maximum open cursors exceeded
Pokud je překročen maximální počet otevřených kurzorů, databáze se stane nepoužitelnou s výjimkou kurzorů, které jsou již zadrženy. Ve většině případů, kdy k tomu dojde, se však držené kurzory ani nepoužívají (což by byl případ vaší otázky).
Od verze Java 7 je nejlepším způsobem, jak to zvládnout, použít zkus se zdroji
. Oba ResultSet
a PreparedStatement
implementuje AutoCloseable
rozhraní, což znamená, že budou zavřeny, když již nebudou potřeba.
Pokud nemáte java 7, musíte to vyřešit v finally
blok, ale ujistěte se, že jste před uzavřením ověřili nulové hodnoty, jinak můžete narazit na NPE, pokud nebyl zdroj nikdy inicializován.
Všimněte si, že obrácený postup nezpůsobí žádný problém, protože uzavřením příkazu se automaticky zavře výsledná sada.
Všimněte si, že můžete snadno povolit více kurzorů vaší aplikaci, abyste snížili pravděpodobnost překročení maxima.
ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;
Pokud však narazíte na maximální počet otevřených kurzorů, většinou by to nemělo být řešením, protože by to pouze skrylo skutečný problém.