2016-04-07 20 views
0

Warum erhalte ich diese Fehlermeldung:Fehler "ResultSet geschlossen"

Fehler: java.sql.SQLException: ResultSet geschlossen

von diesem Code:

try{ 
     ArrayList<String> longArray = new ArrayList<String>(); 
     longArray.add("12345678912"); // All column in sqlite database are "text" so that's why I create String List 
     longArray.add("12345678911"); 
     System.out.println(longArray); 
     String parameters = StringUtils.join(longArray.iterator(),","); 
     connection = sqliteConnection.dbConnector(); 
     PreparedStatement pst=connection.prepareStatement("select columnA from TableUser where id in (?)");  
     pst.setString(1, parameters); 
     ResultSet rs = pst.executeQuery(); 

     System.out.println(rs.getString("columnA")); // did not print anything, probably rs is empty 
     rs.close(); 

Database Details :
Ich habe eine Tabelle TableUser in der Datenbank, wo es eine Spalte "id" als Text gibt.

Eine andere Frage: Ist der Wert in der Datenbank 12345678912 (TEXT) das gleiche wie longArray.add("12345678912")?

Antwort

0

Sie vermissen eine if(rs.next()) oder while(rs.next()), nachdem Sie die ResultSet abrufen.

Für Ihre andere Frage ... ja, sie sind beide Strings sind sie nicht?

Edit: Das Problem war im Wesentlichen zu versuchen, mehrere Parameter in die IN-Anweisung in einem PreparedStatement setzen. Siehe PreparedStatement IN Clause Alternatives

+0

Das stimmt. Aber while (rs.next()) \t \t { \t \t \t System.out.println (rs.getString ("columnA")); \t \t} habe nichts gedruckt .. Wie kann ich es beheben? Vielen Dank – arkani

+0

Durch eine Abfrage, die eine leere Ergebnismenge nicht zurückgibt. – Kayaman

+0

Versuchen Sie, eine "Anweisung" zu verwenden und die IDs mit der Abfrage zu verketten, um zu sehen, ob sie funktioniert (mit den ''' Trennzeichen für die IDs, wenn sie 'TEXT' sind). Es kann sein, dass der SQLite-Treiber die Art, wie Sie diese vorbereitete Anweisung verwenden, nicht mag. – Kayaman

Verwandte Themen