La deuxième requête indique que le resultset est fermé

J'ai 2 classs. Le problème est, que j'ai un resultset est une exception fermée si j'essaie d'exécuter la deuxième requête. La deuxième requête rs.next renvoie true. Pouvez-vous me dire à quel post je ferme les mauvaises ressources? Si je supprime this.queryResult.close() et this.statement.close() de la méthode releaseResources (), l'erreur est "La connection a été fermée. Je ne crée pas avec chaque appel une nouvelle instance de connection, preparedstatement et resultset ?

Principale:

 public static void main(Ssortingng[] args) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException, InterruptedException { DatabaseConnectionHelper con = new DatabaseConnectionHelper(); ResultSet rs = con.executeQuery("SELECT * FROM [winfiler].[dbo].[customer_data]"); System.out.println(rs.next()); while(rs.next()){ System.out.println(rs.getSsortingng("name")); } con.releaseResources(); ResultSet rs3 = con.executeQuery("SELECT * FROM [winfiler].[dbo].[customer_data]"); System.out.println(rs3.next()); while(rs3.next()){ System.out.println(rs.getSsortingng("name")); } } 

Helperclass pour la connection db:

 public class DatabaseConnectionHelper { private Connection connection=null; private PreparedStatement statement=null; private ResultSet queryResult=null; public Connection connectToDatabase(){ try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); connection = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=******;user=********;password=********"); return connection; } catch (ClassNotFoundException ex) { MessageHelper.createClassNotFoundExceptionMessage("Eine exception ist aufgetreten", "Classe konnte nicht gefunden werden (Verbindung zur Datenbank)", ex.getMessage()); } catch (SQLException ex) { MessageHelper.createSQLExceptionMessage("Eine exception ist aufgetreten", "Probleme beim der Datenabfrage - DatabaseConnectionHelper", ex.getMessage()); } return null; } public ResultSet executeQuery(Ssortingng query){ try{ statement = connectToDatabase().prepareStatement(query); queryResult = statement.executeQuery(); return queryResult; }catch (SQLException ex) { MessageHelper.createSQLExceptionMessage("Eine exception ist aufgetreten", "Probleme beim der Datenabfrage - DatabaseConnectionHelper", ex.getMessage()); } return null; } public boolean releaseResources(){ try { this.queryResult.close(); this.statement.close(); this.connection.close(); return true; } catch (SQLException ex) { MessageHelper.createSQLExceptionMessage("Eine exception ist aufgetreten", "Resourcen konnten nicht freigegeben werden - DatabaseConnectionHelper", ex.getMessage()); } return false; } } 

Votre problème actuel est que vous appelez rs.getSsortingng("name"); au lieu de rs3.getSsortingng("name"); dans votre deuxième boucle.

Votre connectToDatabase() crée une nouvelle connection. Donc ce n'est pas le problème tant que vous n'utilisez pas DBConnectionHelper simultanément.

BTW1: Vous devriez éviter le System.out(rs.next()); car cela a des effets secondaires et saute la première rangée. BTW2: votre releaseResources() peut être améliorée: vous devez ignorer / séparer séparément les exceptions de RS et satement ou au less fermer la connection elle-même dans un file final.

Le problème est que lorsque vous appelez con.releaseResources (), juste avant la deuxième requête, vous libérez réellement l'object de connection.