Können, führen wir einige Abfragen beim überqueren resultset in java
Bin ich versucht zu implementieren, eine Aufgabe in java mit JDBC, wie die Gespeicherte Prozedur in SQL.
In SQL, wenn wir schreiben, cursor, ersten wir führen Sie select-Abfrage und dann das abrufen der Datensätze führen wir einige Aktionen.
Wahrscheinlich habe ich feuerte eine select-Abfrage in der Struktur.
sql="SELECT a,c,b FROM tbl_name";
res=stmt.executeQuery(); -----------> CONTAINS 30 RECORDS
while(res.next())
{
sql="INSERT INTO table .....";
rs1=stmt.executeQuery();
sql="SELECT d,e,f FROM table .....";
rs1=stmt.executeQuery();
like wise many queries are there.....
.
.
.
..
}
Als meine select-Abfrage enthält 30 Einträge, aber wenn ich es ausführen meiner while(res.next()) nur einmal ausführen.
Aber anstelle von Abfragen, die ich gerade versuche auf dem Anzeigefeld, um zu überprüfen, ob es sich Holen oder nicht
dann ist es gut funktioniert..
(while-Schleife enthält nur System.aus.println-Anweisungen)
sql="SELECT * FROM tbl_name";
res=stmt.executeQuery(sql);
while(res.next())
{
S.O.P.("fields : "+res.getString(0));
}
(Ich denke, dass, wenn das resultset wird immer Durchlaufen, wenn in zwischen den Abfragen gibt es dann Anfragen die ausgeführt, aber zur gleichen Zeit-Schleife auch bekommen führt und nach einiger Zeit, wenn Abfragen Ausführung erhalten Sie fertig, die while-Schleife wird der resultset erhalten auch abgeschlossen und daher es bekommen, führt für einmal. Ich bin nicht sicher.)
Warum ist es passiert bin ich nicht immer. Ist alles, was ich falsch mache?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jeder
Statement
kann nur eine offeneResultSet
zu einer Zeit. Aus der Dokumentation:Die Aufrufe
executeQuery
im inneren der Schleife wird implizit in der Nähe der äußerenResultSet
, so dass ist, warum sehen Sie nur eine Zeile.Connection
- Objekt zu erstellen, die mehrereStatements
Rückkehr mehrereResultSet
s.Ich würde strukturiere dein flow. Vor allem, versuchen Sie nicht und verwenden Sie den gleichen
Statement
Objekt führen Sie eine neue Abfrage. Wenn ich versuche, die Verwendung des PostgreSQL-Treiber, zum Beispiel, habe ich bereitwillig eine Ausnahme, "Das ResultSet geschlossen ist."Statt, das schreiben etwas wie dieses:
Natürlich, umgeben mit
try-catch-finally
als nötig.Passiert dies nicht möchten, können Sie versuchen, bis Sie Ihre Abfrage wird dann ausgeführt und die Schleife wird warten.
idealerweise können Sie nur eine Anweisung ausführen in einem moment in der Zeit gegen eine Datenbank-Verbindung, so können Sie entweder das erstellen und ausführen der zweiten Anweisung oder eine Iteration durch die Ergebnismenge, die von der ersten Anweisung und speichern die Daten in eine collection (z.B. arraylist hashmap), dann schließen Sie diese Aussage und führen Sie die zweite, diesmal abrufen der id ' s aus der Sammlung in gespeichert.
ResultSet
s offen für ein EinzelzimmerStatement
. Sie brauchen nicht zu öffnen Sie eine ganz neue Verbindung, um eine zweite Abfrage; erstellen Sie einfach einen neuenStatement
und verwenden.