Maison > base de données > tutoriel mysql > Comment éviter « Opération non autorisée après la fermeture de ResultSet » dans Java JDBC MySQL ?

Comment éviter « Opération non autorisée après la fermeture de ResultSet » dans Java JDBC MySQL ?

Linda Hamilton
Libérer: 2024-11-27 11:20:11
original
377 Les gens l'ont consulté

How to Avoid

Gestion de la fermeture des ResultSet dans les connexions Java JDBC MySQL

Lorsque vous travaillez avec des bases de données MySQL à l'aide de Java JDBC, il est essentiel de gérer correctement la fermeture des ResultSets pour éviter l'erreur : "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 fermé, entraînant un comportement inattendu et des résultats de requête incorrects.

Comprendre le problème

Dans le code fourni, le l'exception est déclenchée dans la classe MySQLDonation dans la boucle while (results.next()). La cause réelle est que le même objet Statement (instruction) est utilisé à la fois pour la requête SELECT (pour récupérer les dons) et pour la requête DELETE suivante (pour supprimer l'enregistrement de don traité).

Solution : Créer une nouvelle instruction pour chaque requête

Pour résoudre le problème, vous devez créer un nouvel objet Statement à chaque fois que vous exécutez une requête. Cela garantit que le ResultSet précédent n'est pas automatiquement fermé par une exécution de requête ultérieure. Voici les modifications apportées à la classe MySQLDatabase :

public ResultSet query(String query) throws SQLException {
    Statement statement = connection.createStatement();
    if (query.toLowerCase().startsWith("select")) {
        return statement.executeQuery(query);
    } else {
        statement.executeUpdate(query);
    }
    statement.close(); // Optional: May not be necessary as Resources are auto-closed
    return null;
}
Copier après la connexion

Considérations supplémentaires

En plus de la gestion des objets Statement, il est crucial de suivre les meilleures pratiques de gestion des ressources JDBC afin d'éviter la mémoire fuites et assurer une bonne gestion des connexions à la base de données. Voici quelques conseils supplémentaires :

  • Utilisez des blocs try-with-resources pour la gestion automatique des ressources.
  • Initialisez et fermez Statement, ResultSet et Objets de connexion dans un bloc try-catch.
  • Gérez les exceptions avec élégance et libérez des ressources même en présence d'exceptions.

Conclusion

En créant une nouvelle instruction pour chaque requête et en adhérant aux meilleures pratiques de gestion des ressources, vous pouvez éviter l'"Opération "non autorisé après la fermeture de ResultSet" et assurez-vous de la bonne exécution de vos requêtes MySQL. N'oubliez pas d'optimiser continuellement les interactions de votre base de données pour plus d'efficacité et de fiabilité.

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