Maison > base de données > tutoriel mysql > Pourquoi mon code Java JDBC MySQL lance-t-il « Opération non autorisée après la fermeture de ResultSet » ?

Pourquoi mon code Java JDBC MySQL lance-t-il « Opération non autorisée après la fermeture de ResultSet » ?

Patricia Arquette
Libérer: 2024-11-27 13:56:09
original
244 Les gens l'ont consulté

Why Does My Java JDBC MySQL Code Throw

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(" ", "_")));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal