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 ?
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 :
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!