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
395 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!

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