Hallo, ich erstelle einen Batch mit einem PreparedStatement
in Java wie diesem
Der Datenbankserver ist ein MySQL, in der Tabelle zum Einfügen habe ich mehrere Einschränkungen
Durch diese Einschränkungen, wenn ich einfügen erzeugt Fehler
Ich möchte den Batch ausführen und Fehler weglassen . In diesem Moment wird ein Exception-Batch ausgelöst
Bevor ich die Charge erstelle, habe ich eine Big für die Speicherung eins nach dem anderen wie
%Vor%Aber es ist sehr langsam, in einigen Fällen verarbeitet die Charge 4000 Artikel, fügt 1500 ein und lässt den Rest weg.
Wie mache ich mit dem Stapel?
BEARBEITEN
Ich benutze weblogic um Verbindungen mit diesem Treiber mysql-connector-java-commercial-5.0.3-bin
Ich teste diese Eigenschaften
1.
%Vor%2.
%Vor%3.
%Vor% Und fügen Sie connection.setAutoCommit(false);
hinzu, aber setzen Sie die Ausnahme in Duplikaten fort.
BEARBEITEN
vergessen zu erwähnen, ich verwende für die Verbindung Hibernate + Spring
Das einzige For-Save-Beispiel wurde in Hibernate erstellt, aber für die Performance habe ich versucht, einen JDBC-Batch zu verwenden, in anderen Prozessen in der Webapp verwendet auch JDBC mit der Verbindung von Hibernate und funktioniert gut
Dies ist der vollständige Code
%Vor%Dies erzeugt nächste Ausnahme
java.sql.BatchUpdateException: Eintrag '1-000002725' für Schlüssel duplizieren 'masterID'
Aber ich muss fortfahren
Spring + Ruhezustand Einstellungen beeinträchtigen die Eigenschaften von jdbc? Ich weiß nicht
Ich denke, es kann in einem Wort zusammengefasst werden IGNORE
Wenn Sie den Stapel mit diesem
ausführen %Vor%Diese KEINE Ausnahme werfen mit Constraints, diese übergeben und noch alte Daten in Ihren Zeilen
Wenn Sie die 'neuen Daten' speichern müssen, ändern Sie diese für INSERT ... ON DUPLICATE KEY
Statement, aber denken Sie jetzt nicht daran.
Commit oder Rollback ist nicht notwendig in Ihrem Code @Transactional
Arbeit für Sie.
Ihr großer try {
stürzt nur in SqlException und nicht in BatchUpdateException ab
Sie brauchen nur add allowMultiQueries
beacause andere und default true