2016-04-08 3 views
1

Ich möchte das Ergebnis der Ausführung einer MySQL-Abfrage in eine andere MYSQL-Tabelle einfügen. Folgende ist der Code-Schnipsel:Wie fügt man ein ResultSet in eine neue MYSQL-Tabelle ein?

rs1 = st.executeQuery(query1); 
while(rs1.next()){ 
    insertData(species,rs1,"try");  
} 

Die resultset rs1 enthält eine Anzahl n von Reihen als Ergebnis der Ausführung von query1 zurückgegeben. Ich versuche, alle Zeilen in rs1 in eine andere Tabelle einzufügen. Einsetzvorgang wird in der Funktion insertData() wie folgt durchgeführt:

public void insertData(String species, ResultSet rs, String table)throws Exception{ 
    String q = "Insert into "+table+" values("+rs.getFloat("sl")+","+rs.getFloat("sw")+","+rs.getFloat("pl")+","+rs.getFloat("pw")+",'"+rs.getString("classification")+"')"; 
    int x = st.executeUpdate(q); 
    if(x == 0) 
     System.out.println("Error inserting data"); 
} 

Nachdem ich den Code ausführen, ich die folgende Ausnahme erhalten:

Operation not allowed after ResultSet closed

Soweit ich weiß, rs1.next() Punkte, um den Cursor in die erste Zeile der ersten Iteration.

Bitte korrigieren Sie mich, wenn ich hier etwas Grundlegendes vermisse.

+0

Was ist Ihre insertData()? Kannst du es posten? – haifzhan

+0

Ich habe die Frage bearbeitet –

+0

Bitte sehen Sie meine Antwort unter – haifzhan

Antwort

2

Standardmäßig kann nur ein ResultSet-Objekt pro Anweisungsobjekt gleichzeitig geöffnet sein. Wenn daher das Lesen eines ResultSet-Objekts mit dem Lesen eines anderen ResultSet-Objekts verschachtelt ist, muss jedes Objekt von verschiedenen Statement-Objekten generiert worden sein. Alle Ausführungsmethoden in der Anweisungsschnittstelle schließen implizit das aktuelle ResultSet-Objekt einer Anweisung, wenn eine offene vorhanden ist.

von Statement Java doc

Sie das gleiche Statement st Objekt zweimal verschiedene Abfragen ausführen Anführungszeichen verwenden.

rs1 = st.executeQuery(query1); // executed before while loop 
int x = st.executeUpdate(q); // executed in while loop 

Wenn Sie st.executeUpdate(q); in Ihrem insertData() Methode ausführen, wird ResultSet RS1 geschlossen. Sie müssen eine neue Anweisung erstellen und die zweite Abfrage ausführen.

Verwandte Themen