Maison >base de données >tutoriel mysql >Pourquoi mon code Java génère-t-il une exception « java.sql.SQLException : opération non autorisée après la fermeture de ResultSet » ?

Pourquoi mon code Java génère-t-il une exception « java.sql.SQLException : opération non autorisée après la fermeture de ResultSet » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 21:34:15561parcourir

Why Does My Java Code Throw a

Comprendre l'exception « Opération non autorisée après la fermeture de ResultSet »

Lors de l'exécution d'instructions SQL en Java, il est essentiel de gérer correctement les objets ResultSet pour éviter les exceptions. Une exception courante rencontrée est "java.sql.SQLException : opération non autorisée après la fermeture de ResultSet."

Cette exception se produit lorsqu'une opération (telle que la récupération de données à partir d'un ResultSet) est tentée après la fermeture du ResultSet. L'extrait de code que vous avez fourni illustre ce problème.

Cause première de l'exception

Dans votre code, vous créez un objet instruction et l'utilisez pour exécuter deux requêtes : une pour récupérer le nom de l'utilisateur et un autre pour récupérer les identifiants de la table "profils". Vous tentez ensuite de créer un PreparedStatement en utilisant le même objet de connexion et de préparer une instruction de mise à jour.

Le problème survient lorsque vous accédez à la méthode "getStuff()" dans la boucle while itérant sur les résultats des "profils". tableau. À l'intérieur de cette méthode :

  1. Vous exécutez une requête et obtenez un ResultSet (rs).
  2. Vous ne parvenez pas à fermer le ResultSet avant de revenir.

Ceci viole l'exigence selon laquelle un seul objet ResultSet par Statement peut être ouvert à la fois. Par conséquent, le ResultSet de la méthode "getStuff()" est en conflit avec l'objet ResultSet (rs2) créé dans le code principal.

Solution

Pour résoudre ce problème exception, vous devez gérer correctement les objets ResultSet :

  1. Fermez le ResultSet (rs) obtenu à partir de la méthode "getStuff()" avant retour.
  2. Assurez-vous que le ResultSet (rs) dans le code principal est également fermé une fois qu'il n'est plus nécessaire.

De plus, vous pouvez envisager de créer un nouvel objet Statement pour le Méthode "getStuff()" pour éviter tout conflit potentiel avec l'objet Statement utilisé dans le code principal.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn