Maison > base de données > tutoriel mysql > Comment gérer l'exception « Opération non autorisée après la fermeture de ResultSet » en Java ?

Comment gérer l'exception « Opération non autorisée après la fermeture de ResultSet » en Java ?

Linda Hamilton
Libérer: 2024-10-29 14:21:02
original
884 Les gens l'ont consulté

How to Handle

Java - Gestion de l'exception « Opération non autorisée après la fermeture de ResultSet »

Lors de la fermeture d'une connexion MySQL, vous pouvez rencontrer l'erreur « Opération non autorisée » autorisé après la fermeture de ResultSet." Cela se produit parce que JDBC récupère progressivement les résultats de la requête, vous fournissant un ResultSet qui deviendra invalide à la fermeture de la connexion.

Cause de l'exception

Le ResultSet d'où vous revenez votre méthode repose sur la connexion ouverte. Lorsque vous fermez la connexion dans le bloc enfin, le ResultSet devient inutilisable, entraînant l'exception.

Solution

Au lieu de renvoyer le ResultSet, créez une méthode qui utilise il pour remplir un objet ou une collection d'objets. Ensuite, renvoyez l'objet ou la collection renseignée.

Code refactorisé

Le code suivant montre une version modifiée de votre méthode :

<code class="java">public static List<T> sqlquery(String query, RowMapper<T> rowMapper) throws SQLException {
    Connection connection = DriverManager.getConnection("databaseadress", "username", "password");
    Statement st = connection.createStatement();
    ResultSet rs = st.executeQuery(query);
    List<T> list = new ArrayList<>();
    while (rs.next()) {
        list.add(rowMapper.mapRow(rs));
    }
    try {
        rs.close();
        st.close();
        connection.close();
    } catch (SQLException e) {
        log.info(e);
    }
    return list;
}</code>
Copier après la connexion

Utilisation de RowMapper

L'interface RowMapper est utilisée pour mapper chaque ligne du ResultSet à un objet. Vous pouvez créer votre propre implémentation de RowMapper en fonction de l'objet que vous souhaitez remplir.

Avantages

Cette approche :

  • Vous permet pour renvoyer des objets réutilisables indépendants de la connexion.
  • Empêche les exceptions levées lors de ResultSet ou de la fermeture d'une instruction d'interférer avec la fermeture de la connexion.
  • Facilite le paramétrage des requêtes pour empêcher l'injection SQL.

Conclusion

Pour éviter les exceptions « Opération non autorisée après la fermeture de ResultSet », modifiez votre code pour remplir des objets ou des collections à l'aide d'un RowMapper et renvoyez-les à la place du ResultSet. Cette approche garantit que vos méthodes restent fonctionnelles après la fermeture de la connexion.

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