JDBC PreparedStatement Batch fortfahren bei Fehler einfügen

8

Hallo, ich erstelle einen Batch mit einem PreparedStatement in Java wie diesem

%Vor%

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

herzustellen

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

    
jasilva 24.04.2015, 16:27
quelle

1 Antwort

6

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

Ссылка

    
juan s 03.05.2015, 19:52
quelle

Tags und Links