Maison >base de données >tutoriel mysql >Pourquoi est-ce que j'obtiens \'java.sql.SQLException : opération non autorisée après la fermeture de ResultSet\' lors de l'utilisation de JDBC ?
Java - Impossible d'utiliser ResultSet après la fermeture de la connexion
Problème :
Une tentative de exécuter une requête de base de données à l'aide de JDBC entraîne l'erreur suivante :
java.sql.SQLException: Operation not allowed after ResultSet closed
Analyse :
JDBC utilise un objet ResultSet pour récupérer les données d'une requête. Cependant, lorsque la connexion à la base de données est fermée, l'objet ResultSet devient invalide et ne peut plus être utilisé.
Solution :
Pour résoudre ce problème, évitez de passer l'objet ResultSet au-delà de la méthode qui a exécuté la requête. Au lieu de cela, utilisez ResultSet pour remplir un objet ou une liste et renvoyer cet objet résultant.
Exemple de code avec remplissage d'objets :
<code class="java">public static Collection<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); Collection<T> collection = new ArrayList<>(); while (rs.next()) { collection.add(rowMapper.mapRow(rs)); } // Close resources even if exceptions are thrown closeGracefully(rs, st, connection); return collection; }</code>
Fermer les ressources avec élégance :
<code class="java">private static void closeGracefully(ResultSet rs, Statement st, Connection connection) { if (rs != null) { try { rs.close(); } catch (SQLException e) { /* Log or ignore */ } } if (st != null) { try { st.close(); } catch (SQLException e) { /* Log or ignore */ } } if (connection != null) { try { connection.close(); } catch (SQLException e) { /* Log or ignore */ } } }</code>
Considérations supplémentaires :
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!