Maison > base de données > tutoriel mysql > Pourquoi « Opération non autorisée après la fermeture de ResultSet » se produit-il dans JDBC et comment peut-il être corrigé ?

Pourquoi « Opération non autorisée après la fermeture de ResultSet » se produit-il dans JDBC et comment peut-il être corrigé ?

Linda Hamilton
Libérer: 2024-11-26 16:32:10
original
231 Les gens l'ont consulté

Why Does

Opération non autorisée après la fermeture de MySQL Result Set

Lors de l'interaction avec une base de données à l'aide de JDBC, il est crucial de gérer les objets ResultSet avec soin pour évitez les exceptions telles que « Opération non autorisée après la fermeture de ResultSet ». Cette erreur se produit lorsque vous tentez d'effectuer des opérations sur un ResultSet qui a déjà été fermé.

Comprendre l'exception

L'exception est levée lorsque vous essayez de parcourir un ResultSet utilisant sa méthode next() après sa fermeture. Cela se produit parce que la fermeture d'un ResultSet libère ses ressources, y compris son curseur interne, le rendant invalide pour d'autres opérations.

Causes des ensembles de résultats fermés

  • Appel explicite la méthode close() sur ResultSet
  • Réexécution des requêtes sur le même objet Statement
  • Utilisation l'objet Statement pour créer plusieurs ResultSets

Solution dans le code fourni

L'erreur dans le code fourni se produit dans la classe MySQLDonation lors du parcours de la table des dons . Le ResultSet obtenu à partir de la requête SELECT est fermé lorsque l'instruction est réexécutée pour les requêtes DELETE suivantes.

Pour résoudre ce problème, séparez les étapes d'exécution de la requête et de traitement des résultats :

// In MySQLDatabase class
private void handleDonation(Client client, int creditamount) {
    try (Statement statement = getConnection().createStatement()) {
        // Execute DELETE query with new Statement
        statement.executeUpdate(String.format("DELETE ..."));
    }
}
Copier après la connexion

En créant une nouvelle instruction pour chaque requête, vous vous assurez que le ResultSet reste ouvert jusqu'à ce que la requête soit terminée.

Supplémentaire Notes

  • Envisagez d'utiliser des blocs try-with-resources pour fermer automatiquement les instructions et les ensembles de résultats.
  • Si vous devez parcourir plusieurs ResultSets, exécutez-les sur différents objets Statement .
  • Consultez la documentation JDBC pour connaître les meilleures pratiques de gestion des ResultSets.

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