Exception Java JDBC MySQL : "Opération non autorisée après la fermeture de ResultSet"
Cette erreur se produit généralement lors d'une tentative d'opération sur un ResultSet fermé. Analysons le code fourni pour identifier la cause de l'exception.
Initialisation de la base de données
La classe MySQLDatabase établit une connexion à la base de données dans la méthode connect(). La variable d'instruction est initialisée avec connection.createStatement(). Cependant, cette instruction est partagée dans toutes les opérations de base de données, y compris les requêtes de sélection et de mise à jour.
Traitement des dons
La classe MySQLDonation parcourt la table « dons » et traite le don enregistrements. La boucle while parcourt le ResultSet obtenu à partir de l'instruction query ("SELECT * FROM gieli436_purchases.donations").
Cause de l'exception
L'erreur se produit car l'instruction utilisée pour récupérer le ResultSet est également utilisé pour exécuter la requête de suppression, qui ferme le ResultSet précédent. Par conséquent, les appels next() suivants sur le ResultSet fermé génèrent l'exception « Opération non autorisée après la fermeture du ResultSet ».
Solution
Pour résoudre ce problème, créez une nouvelle instruction pour chaque exécution de requête. Modifiez la classe MySQLDatabase pour supprimer Statement = connection.createStatement(); de connect(). Remplacez toutes les instances d'instruction de la classe par connection.createStatement().
Corrections
// MySQLDatabase class // Remove statement = connection.createStatement(); // Replace statement with connection.createStatement() // MySQLDonation class // Remove private variable statement // Query execution results = connection.createStatement().executeQuery("SELECT * FROM gieli436_purchases.donations"); // Delete execution connection.createStatement().executeUpdate(String.format("DELETE FROM gieli436_purchases.donations WHERE donations.username='%s' LIMIT 1", client.playerName.replaceAll(" ", "_")));
En créant des instructions distinctes pour chaque requête, vous vous assurez que le ResultSet reste ouvert pendant le traitement, empêchant l'exception.
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!