Lækagen vil være det maksimale problem med åben markør.
ORA-01000: maximum open cursors exceeded
Hvis det maksimale antal åbne markører overskrides, vil databasen blive ubrugelig, bortset fra de markører, der allerede er tilbageholdt. Men de fleste gange, når dette sker, bruges de holdte markører ikke engang (hvilket ville være tilfældet i dit spørgsmål).
Siden java 7 er den bedste måde at håndtere dette på at bruge en forsøg med ressourcer
. Begge ResultSet
og PreparedStatement
implementerer AutoCloseable
grænseflade, hvilket betyder, at de vil blive lukket, når de ikke længere er nødvendige.
Hvis du ikke har java 7, så skal du håndtere dette i finally
blokere, men sørg for at verificere for null-værdier, før du lukker, ellers kan du støde på en NPE, hvis ressource aldrig blev initialiseret.
Bemærk, at det omvendte ikke vil forårsage noget problem, da lukning af en erklæring automatisk vil lukke resultatsættet.
Bemærk, at du nemt kan tillade flere markører til din applikation for mindre chance for at overskride maksimum.
ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;
Men det meste af tiden, hvis du støder på maksimalt åbne markører, burde dette ikke være en løsning, da det kun ville skjule det virkelige problem.