-
En règle générale, en Java, quand un objet est hors de portée, il est automatiquement garbage collector, mais la spécification Java ne place pas toutes les exigences spécifiques de la JVM sur le moment (ou même si) cela se produira pour un objet particulier. Par conséquent, ne comptez pas sur finaliseurs (finally) de fermer vos curseurs.
Explicitement ferment tous les curseurs à l'aide soit par ResultSet.close (), Statement.close (), et / ou PreparedStatement.close () lorsque vous n'avez plus besoin du curseur. Cela garantit que les curseurs côté serveur correspondant sont fermées, empêchant l'ORA-1000 erreur. N'oubliez pas de fermer ces objets JDBC dans le cadre qu'ils ont été créés. La fermeture de ces objets dans un bloc {} enfin est toutefois recommandé, ne comptez pas sur une méthode finally (), car une méthode finally () n'est jamais garanti à courir par la JVM!
Une erreur fréquente survient lorsque CallableStatement est utilisée pour appeler une procédure PL / SQL qui retourne un REF CURSOR. Si vous ne fermez pas l'objet correspondant ResultSet, un curseur sera laissé ouvert sur le serveur.
-
Je pense qu'il y a confusion entre la méthode finalize et le bloc finally.
Il n'y aucun danger à fermer ses connexions, curseurs dans un bloc finally, bien au contraire. On est certain que ce bloc sera exécuté en cas d'exception, ou pas.
En revanche, on est jamais certain de l'appel de la méthode finalize, donc effectivement, il faut éviter d'y mettre du code de libération de ressources.