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
Linda Hamiltonoriginal
2024-10-29 14:21:02848parcourir

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>

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!

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