Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Behandlung von JDBC-Batch-Einfügungsausnahmen

Sie geben an, dass Sie Stapel von SQL-Anweisungen ausführen, also gehe ich davon aus, dass Sie executeBatch verwenden . Wenn Sie batch ausführen einen Stapel von Anweisungen, können einige der Anweisungen erfolgreich sein und einige der Anweisungen fehlschlagen. Wenn eine Anweisung fehlschlägt, bedeutet dies nicht, dass der JDBC-Treiber die erfolgreichen Anweisungen rückgängig macht. Der JDBC-Treiber kann versuchen, alle Anweisungen im Stapel auszuführen, wenn eine Anweisung fehlschlägt, oder er kann die Ausführung von Anweisungen im Stapel stoppen, sobald eine Anweisung fehlschlägt (es hört sich so an, als würde der von Ihnen verwendete Treiber die Ausführung von Anweisungen als beenden sobald ein Fehler auftritt).

Wenn eine Anweisung in einem Stapel fehlschlägt, sollten Sie eine BatchUpdateException erhalten . In Ihrem Ausnahmehandler müssen Sie getUpdateCounts aufrufen . Das gibt Ihnen ein Array von int das sagt Ihnen entweder, wie viele Zeilen die Anweisung aktualisiert hat, oder ein Statement.SUCCESS_NO_INFO was anzeigt, dass die Anweisung erfolgreich war, aber keine Zeilenanzahl verfügbar war, oder ein Statement.EXECUTE_FAILED zeigt an, dass die Anweisung fehlgeschlagen ist. Wenn die ersten 99 Anweisungen erfolgreich sind, die 100. Anweisung einen Fehler generiert und die verbleibenden Anweisungen nicht ausgeführt werden, sollten Sie ein Array mit 100 Elementen zurückerhalten, wobei die ersten 99 Elemente den Erfolg anzeigen und das 100. Element Statement.EXECUTE_FAILED . Ihr Code müsste dann die Anweisungen wiederholen, die nicht ausgeführt wurden (in diesem Fall die Anweisungen 101-1000).