Maison > base de données > tutoriel mysql > Pourquoi « Opération non autorisée après la fermeture de ResultSet » se produit-il lors de la réutilisation d'une connexion d'instruction en Java ?

Pourquoi « Opération non autorisée après la fermeture de ResultSet » se produit-il lors de la réutilisation d'une connexion d'instruction en Java ?

DDD
Libérer: 2024-12-16 17:44:12
original
661 Les gens l'ont consulté

Why Does

Fermeture du ResultSet avant de réutiliser la connexion à l'instruction

Dans la programmation de base de données Java, on rencontre parfois une exception qui survient lors de l'utilisation d'une instruction préparée après la fermeture le ResultSet. Cette exception, « Opération non autorisée après la fermeture de ResultSet », se produit spécifiquement lorsque le même objet de connexion est utilisé.

Dans l'extrait de code donné, une nouvelle instruction préparée est créée à l'aide du même objet de connexion après la fermeture des ResultSets existants. (rs et rs2). Cela soulève l'exception. Pour résoudre ce problème et réutiliser la connexion à l'instruction, il est recommandé de s'assurer d'abord que tous les ResultSets précédents associés à l'instruction sont fermés.

Une approche recommandée consiste à utiliser un bloc try-with-resources, qui ferme automatiquement les ResultSets. et déclarations. Voici un exemple :

try (
    Statement statement = connection.createStatement();
    ResultSet rs = statement.executeQuery("SELECT `name` FROM `user` WHERE `id` = " + userId + " LIMIT 1;")
) {
    if (rs.next()) {
        // Process the results
    }

    try (
        ResultSet rs2 = statement.executeQuery("SELECT `id` FROM `profiles` WHERE `id` =" + profId + ";")
    ) {
        String updateSql = "INSERT INTO `blah` ...";
        PreparedStatement pst = (PreparedStatement) connection.prepareStatement(updateSql);

        while (rs2.next()) {
            // ...
        }

        pst.executeBatch();
    }
} catch (SQLException e) {
    e.printStackTrace();
}
Copier après la connexion

Dans cet exemple, rs et rs2 sont fermés dans leurs blocs try respectifs avant de tenter d'utiliser l'instruction pour préparer un nouveau lot. Cela garantit qu'il n'y a pas de ResultSets ouverts avant d'exécuter l'instruction préparée.

N'oubliez pas que le maintien des objets ResultSet actifs est crucial pour une interaction correcte avec la base de données. Donnez toujours la priorité à la gestion et au nettoyage appropriés des ressources pour éviter les exceptions et garantir l'intégrité des données.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal