Frage

Ich möchte eine Menge Zeilen in eine Tabelle einfügen, die die Schlüssel automatisch generiert. JDBC garantiert nicht, dass das Erhalten der generierten Schlüssel auf einem Batch -Update funktioniert.

It is implementation-defined as to whether getGeneratedKeys will return generated values after invoking the executeBatch method. (JDBC 4.0 Spezifikation 2006, S. 135).

Ich habe zwei Möglichkeiten. Fügen Sie jede Zeile separat ein und rufen Sie die Taste ab. Führen Sie einen Batch -Einsatz aus und fragen Sie dann nach den Schlüssel.

Um das Abfragen mehrerer Schlüssel zu vermeiden, könnte ich diesen Ansatz verwenden hier. ZB 5 erstellte Aussagen mit unterschiedlichen Größen. Und dann meine "Batch -Abfrage" in die kleinstmögliche Aussage einteilen.

Was ist die schnellere Methode?

War es hilfreich?

Lösung

Es hängt davon ab, ob.

Ich habe keine Zahlen, ob executeBatch() ist tatsächlich schneller als ein benutzt PreparedStatement wiederholt, mein Vorschlag ist also:

  1. Versuchen Sie, ob getGeneratedKeys() Funktioniert für Ihren JDBC -Treiber. Wenn es nicht funktioniert, funktionieren die Batched -Beilagen sowieso nicht für Sie.

  2. Schreiben Sie einen Testfall für beide und messen Sie die Leistung. Das gibt Ihnen echte Daten, um Ihre Entscheidung zu stützen. Alles andere ist nur Vermutungen (und 90% der Fälle falsch).

BEARBEITEN Wenn Sie Ihre App DB Agnostic beibehalten möchten, fügen Sie den Test Ihrer App hinzu und führen Sie ihn in einer TEMP/Test -Tabelle aus. Wenn der Test erfolgreich ist, wählen Sie eine Implementierung aus, die Charge Updates verwendet, ansonsten zurück in Brute Force.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top