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.