2012-04-04 2 views
1

Ich versuche, eine While-Schleife einzurichten, die mehrere Zeilen in eine MySQL-Tabelle mithilfe der JDBC-Treiber in Java einfügt. Die Idee ist, dass ich mit einer Erklärung nach dem Vorbild der am Ende:Merge mehrere PreparedStatements zusammen

INSERT INTO table (column1, column2) VALUES (column1, column2), (column1, column2); 

Ich möchte diese Aussage zur Einrichtung eines java.sql.PreparedStatement, aber ich möchte kleine Bits der Anweisung vorzubereiten, eine Zeile auf Zeit - hauptsächlich, weil die Anzahl der Einträge dynamisch ist, und dies scheint der beste Weg, um eine große Abfrage zu erstellen.

Dies erfordert, dass die kleinen Teile jedes Mal, wenn ein weiterer Block generiert wird, zusammengeführt werden. Wie füge ich diese zusammen? Oder würden Sie vorschlagen, diese Idee zu vergessen und Tausende von INSERT Anweisungen gleichzeitig auszuführen?

Danke, Patrick

+1

Sie möchten Batch-Aktualisierungen verwenden. Ein Beispiel finden Sie [hier] (http://www.tutorialspoint.com/jdbc/jdbc-batch-processing.htm). –

Antwort

1

Es hängt davon ab, wie oft Sie diese Schleife ausführen, um Tausende von Anweisungen auszuführen, aber das ist einer der genauen Zwecke von vorbereiteten Anweisungen und gespeicherten Prozeduren - da die Abfrage nicht bei jeder Ausführung neu kompiliert werden muss potenziell massive Leistungssteigerungen bei der Abfrage in einer Schleife über ein si MPle-SQL-Anweisung ausführen, die bei jeder Schleifeniteration kompiliert und ausgeführt werden muss.

Diese Gewinne können immer noch nicht mit der Leistung einer vorbereiteten Anweisung übereinstimmen, die in einer langen Multi-Einfügung in einer Schleife erstellt wird, wie Sie es wünschen, aber wird einfacher zu programmieren sein. Ich würde empfehlen, bei einer Ausführungsschleife zu bleiben, es sei denn, die Leistung wird problematisch.

+0

Fair genug, ich war besorgt, dass es die Leistung Geschwindigkeit beeinflussen könnte, aber das macht die Dinge klar. Danke für deine Antwort. – Patrickdev

1

Besser ein PreparedStatement vorzubereiten und sie so viel wiederzuverwenden, wie Sie wollen:

INSERT INTO (Tabelle) (column1, column2) VALUES (column1, column2)

+0

Vielen Dank für Ihre Antwort. – Patrickdev