Maison >base de données >tutoriel mysql >Comment éviter « java.sql.SQLException : Opération non autorisée après la fermeture de ResultSet » en Java ?
Renvoi d'un ResultSet
Lors de l'interrogation d'une base de données, il est nécessaire de gérer efficacement les résultats renvoyés. Un problème courant survient lorsque l’on tente de renvoyer un ResultSet à partir d’une méthode qui interroge la base de données. Cependant, renvoyer directement un ResultSet peut entraîner des fuites de ressources et une mauvaise gestion des ressources.
L'erreur "java.sql.SQLException : Opération non autorisée après la fermeture de ResultSet" indique que l'objet ResultSet a été fermé avant que la méthode ne puisse retournez-le. Pour résoudre ce problème, il est recommandé de mapper le ResultSet à une collection de Javabeans et de la renvoyer à la place. Cette approche garantit que le ResultSet est fermé automatiquement après utilisation, évitant ainsi les fuites de ressources.
Un exemple de la façon de mapper le ResultSet à une liste de Javabeans est fourni ci-dessous :
public List<Biler> list() throws SQLException { Connection connection = null; PreparedStatement statement = null; ResultSet resultSet = null; List<Biler> bilers = new ArrayList<Biler>(); try { connection = database.getConnection(); statement = connection.prepareStatement("SELECT id, name, value FROM Biler"); resultSet = statement.executeQuery(); while (resultSet.next()) { Biler biler = new Biler(); biler.setId(resultSet.getLong("id")); biler.setName(resultSet.getString("name")); biler.setValue(resultSet.getInt("value")); bilers.add(biler); } } finally { if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {} if (statement != null) try { statement.close(); } catch (SQLException ignore) {} if (connection != null) try { connection.close(); } catch (SQLException ignore) {} } return bilers; }
Dans ce Par exemple, la méthode list() interroge la base de données, mappe les résultats à une liste d'objets Biler et renvoie la liste. Cela garantit que ResultSet est correctement fermé et évite les fuites de ressources.
Une autre approche consiste à utiliser l'instruction try-with-resources, qui ferme automatiquement les ressources lorsque le bloc de code est terminé :
public List<Biler> list() throws SQLException { List<Biler> bilers = new ArrayList<Biler>(); try ( Connection connection = database.getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT id, name, value FROM Biler"); ResultSet resultSet = statement.executeQuery(); ) { while (resultSet.next()) { Biler biler = new Biler(); biler.setId(resultSet.getLong("id")); biler.setName(resultSet.getString("name")); biler.setValue(resultSet.getInt("value")); bilers.add(biler); } } return bilers; }
En suivant ces recommandations, les développeurs peuvent garantir que les ResultSets sont gérés correctement, évitant ainsi les fuites de ressources et garantissant un accès efficace aux bases de données dans les applications Java.
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!