2017-03-02 2 views
0

verwendet wird, bekomme ich diesen Fehler, wenn ich versuche, ein ResultSet zu bekommen. Ich habe lange online gesucht und es gibt eine Menge Leute, die das gleiche Problem wie ich bekommen, aber ihr Problem ist, dass sie das PreparedStatement für mehrere Abfragen verwenden.Betrieb nicht erlaubt nach ResultSet Fehlern geschlossen, auch wenn das PreparedStatement nur einmal

Wie Sie im folgenden Code sehen können, verwende ich die PreparedStatement nur einmal.

Die getSQLConnection() Methode gibt eine brandneue Verbindung. Der Fehler auf der Linie geworfen wird: ResultSet rs = ps.executeQuery()

try (Connection connection = getSQLConnection(); 
      PreparedStatement ps = connection.prepareStatement(qry); 
      ResultSet rs = ps.executeQuery()) { 

     return rs; 

    } catch (SQLException ex) { 
     plugin.get().getLogger().log(Level.SEVERE, "Couldn't execute SQL statement: ", ex); 
    } 

ich verwendet habe, SQL-Datenbanken vor und es hat dies nie getan. Ich bin verwirrt. Hoffe, ihr mögt mir helfen!

Antwort

2

Wenn Sie den Versuch mit Ressourcen verwendet Java sagte alle Ressourcen innerhalb der try Klausel zu schließen, sobald der Block selbst Ausführung beendet hat. Dazu gehört auch, wie Sie es geschrieben haben, die ResultSet, was bedeutet, wer auch immer Ihre Methode aufgerufen wird nie dieses Ergebnis Satz verwenden können. Stattdessen sollten Sie das Ergebnis innerhalb des try-Block gesetzt verarbeiten:

try (Connection connection = getSQLConnection(); 
     PreparedStatement ps = connection.prepareStatement(qry); 
     ResultSet rs = ps.executeQuery()) { 

    // process result set here 
} 

Abgesehen dass die Ergebnismenge geschlossen wird die Zeit sein, der Anrufer es empfängt, Rückkehr ein anderes Problem hat, dass die Bereinigung für Ihre JDBC-Aufruf jetzt sein muss an zwei Orten gemacht. Dies ist höchst unerwünscht und ein Wartungsproblem.

Verwandte Themen