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
Linda Hamiltonoriginal
2024-11-26 16:32:10289parcourir

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 ..."));
    }
}

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!

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