O vazamento será o problema máximo de cursor aberto.
ORA-01000: maximum open cursors exceeded
Se o máximo de cursores abertos for excedido, o banco de dados ficará inutilizável, exceto para os cursores que já estão retidos. No entanto, na maioria das vezes, quando isso acontece, os cursores mantidos nem são usados (o que seria o caso da sua pergunta).
Desde o java 7, a melhor maneira de lidar com isso é usar uma tentar com recursos . Ambos
ResultSet
e PreparedStatement
implementa AutoCloseable
interface, o que significa que eles serão fechados quando não forem mais necessários. Se você não tem java 7, então você precisa lidar com isso no
finally
block, mas certifique-se de verificar os valores nulos antes de fechar, caso contrário você poderá encontrar um NPE se o recurso nunca tiver sido inicializado. Observe que o inverso não causará nenhum problema, pois fechar uma instrução fechará automaticamente o conjunto de resultados.
Observe que você pode facilmente permitir mais cursores em seu aplicativo para menos chance de exceder o máximo.
ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;
No entanto, na maioria das vezes, se você encontrar o máximo de cursores abertos, isso não deve ser uma solução, pois apenas ocultaria o problema real.