Maison > base de données > tutoriel mysql > Pourquoi mon code Java génère-t-il une erreur « Opération non autorisée après la fermeture du jeu de résultats » lors de l'utilisation de JDBC ?

Pourquoi mon code Java génère-t-il une erreur « Opération non autorisée après la fermeture du jeu de résultats » lors de l'utilisation de JDBC ?

Barbara Streisand
Libérer: 2024-11-02 03:56:03
original
430 Les gens l'ont consulté

Why does my Java code throw a

Erreur JDBC ResultSet : "Opération non autorisée après la fermeture de ResultSet"

En Java, utiliser JDBC pour se connecter à une base de données et exécuter des requêtes via un ResultSet peut entraîner des erreurs si la connexion est fermée prématurément.

Cause :

Le ResultSet JDBC n'est pas une représentation complète des résultats de la requête. Au lieu de cela, il fournit une connexion en direct à la base de données, vous permettant de récupérer les résultats ligne par ligne. Si la connexion est fermée, le ResultSet perd sa connexion et devient invalide.

Message d'erreur :

java.sql.SQLException: Operation not allowed after ResultSet closed
Copier après la connexion

Exemple de code :

Le code suivant illustre l'erreur :

<code class="java">ResultSet rs = null;
Connection connection = null;
Statement st = null;
try {
    connection = DriverManager.getConnection("databaseadress","username","password");
    st = connection.createStatement();  
    rs = st.executeQuery(query);
} catch (...) {} // exception handling
finally {
    if (rs != null) rs.close();
    if (st!= null) st.close();
    if (connection != null) connection.close();
}</code>
Copier après la connexion

Dans ce code, l'erreur se produit car rs est toujours utilisé en dehors du bloc final, même après la fermeture de la connexion.

Solution :

Pour éviter cette erreur, vous devez remplir un objet ou une collection transitoire basée sur le ResultSet dans la portée de la connexion à la base de données. Une fois la connexion fermée, l'objet ou la collection transitoire peut être retourné ou utilisé sans aucun problème.

Code restructuré :

<code class="java">public static <T> List<T> sqlquery (String query, RowMapper<T> rowMapper) throws SQLException {
    Connection connection = null;
    Statement st = null;
    ResultSet rs = null;
    connection = DriverManager.getConnection("databaseadress","username","password");
    st = connection.createStatement();  
    rs = st.executeQuery(query);
    List<T> list = new ArrayList<>();
    while (rs.next()) {
        list.add(rowMapper.mapRow(rs));
    }
    if (rs != null) rs.close();
    if (st != null) st.close();
    if (connection != null) connection.close();
    return list;
}</code>
Copier après 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 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