Ungültiger Vorgang: ResultSet geschlossen ist
Wenn mein resultset-Daten groß ist, bekomme ich
com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][4.9.78] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null
Ausnahme, aber nicht, wenn ich versuche, mit weniger Menge von Daten im resultset
Unten ist mein code-snippet
ResultSet rs=null;
String sql_query="select * from exception_main;select * from m_roles"
String query1=sql_query.toUpperCase();
String[] results=query1.split(";");
CSVWriter writer = new CSVWriter(new FileWriter(csv_file_path + csv_file_name), ',',CSVWriter.NO_QUOTE_CHARACTER);
for(int i=0;i<results.length;i++)
{
if(results[i].startsWith("SELECT"))
{
System.out.println("Inside select"+ results[i]);
ps = conn1.prepareStatement(results[i].toString());
rs = ps.executeQuery();
...
//writing to csv file
System.out.println("Count..." + rs.getRow());
writer.writeAll(rs, true);
while(rs.next()){
rs.deleteRow();
}
System.out.println("Count...3:::::::" + rs1.getRow());
}
}
writer.close();
rs.close();
InformationsquelleAutor happy | 2012-06-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Halten
bevor die for-Schleife.
InformationsquelleAutor anirudha
Aus der Java docs:
Ein ResultSet-Objekt wird automatisch geschlossen, indem das Statement-Objekt erzeugt es, wenn das Statement-Objekt geschlossen wird, erneut ausgeführt oder verwendet wird, um das nächste Ergebnis aus einer Sequenz von mehreren Ergebnissen.
Daher dein Fehler.
Ihre
stmt
Statement Objekt wird erneut ausgeführt, jedesmal, wenn in Ihremfor
Schleife.Auch, von hier aus:
Für nicht-gehaltene Cursor, wenn der Fahrer beendet das Durchlaufen der 1. ResultSet, der Fahrer flow Begehen, wenn autoCommit eingeschaltet ist, und schließen alles andere aus. Wenn Sie wollen, dass die anderen ResultSet offen bleiben, können Sie wollen, verwenden Sie die with hold-cursor.
EDIT:
(in der OP - bitte post ein Ausschnitt. Nicht ständig ändern snippets die ganze Zeit)
Die Antwort ist immer noch die gleichen : Sie sind mit zwei Abfragen auf die gleiche
ResultSet
, in Ihremfor
Schleife. Das ist nicht zur Arbeit gehen. DieResultSet
werden geschlossen, wenn Sie erneut ausführen die gleichenStatement
Objekt mit verschiedenen Abfragen. Entweder verwenden Sie unterschiedlicheStatement
Objekte, oder verwenden Sie einen anderen Ansatz und lassen Sie diesefor
loop-Idee.InformationsquelleAutor Kazekage Gaara