Läckan kommer att vara det största problemet med öppen markör.
ORA-01000: maximum open cursors exceeded
Om det maximala antalet öppna markörer överskrids kommer databasen att bli oanvändbar, förutom de markörer som redan hålls. Men de flesta gånger när detta händer används inte ens de hållna markörerna (vilket skulle vara fallet i din fråga).
Sedan java 7 är det bästa sättet att hantera detta att använda ett försök med resurser
. Båda ResultSet
och PreparedStatement
implementerar AutoCloseable
gränssnitt vilket innebär att de kommer att stängas när de inte behövs längre.
Om du inte har java 7 måste du hantera detta i finally
blockera, men se till att du verifierar för nollvärden innan du stänger annars kan du stöta på en NPE om resursen aldrig initierades.
Observera att det omvända inte kommer att orsaka några problem eftersom att stänga ett uttalande kommer automatiskt att stänga resultatet.
Observera att du enkelt kan tillåta fler markörer till din applikation för mindre chans att överskrida maxgränsen.
ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;
Men för det mesta om du stöter på maximalt öppna markörer borde detta inte vara en lösning eftersom det bara skulle dölja det verkliga problemet.