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; }
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 :
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!