Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtention de java.sql.SQLException :opération non autorisée après la fermeture de ResultSet

Le problème vient de la façon dont vous récupérez les données dans getStuff() . Chaque fois que vous visitez getStuff() vous obtenez un nouveau ResultSet mais vous ne le fermez pas.

Cela viole l'attente de la Statement classe (voir ici - http://docs. oracle.com/javase/7/docs/api/java/sql/Statement.html ):

Par défaut, un seul objet ResultSet par objet Statement peut être ouvert en même temps. Par conséquent, si la lecture d'un objet ResultSet est entrelacée avec la lecture d'un autre, chacun doit avoir été généré par des objets Statement différents. Toutes les méthodes d'exécution de l'interface Statement ferment implicitement l'objet ResultSet actuel d'une instruction s'il en existe un ouvert.

Ce qui rend les choses encore pires, ce sont les rs du code d'appel. Il est également dérivé de la statement terrain mais il n'est pas fermé.

Conclusion :vous avez plusieurs ResultSet appartenant au même Statement objet ouvert simultanément.