# executeBatch() - Inserts trotz Fehler weitermachen



## matthias_ (30. Nov 2005)

Hallo...

Habe folgendes Problem...Versuche gerade Datensätze mittels executeBatch() in eine Postgres DB zu schreiben (JDBC-Treiber: 8.0-314 JDBC 3)...funktioniert auch alles so weit...

Was mich jetzt stört ist, dass der Treiber nach dem ersten fehlerhaften Statement eine Exception schmeisst und alle darauffolgenden Statements, obwohl sie keinen Fehler erzeugen würden nicht mehr reingeschrieben werden...

Welche Möglichkeiten gibts da für micht? anderer Treiber? oder kennt jemand eine andere Lösung?

Danke im Vorraus!

mfg Matthias


----------



## Ilja (30. Nov 2005)

fange die exception ab, verbinde neu und mach ab der nächten stelle im batch weiter...


----------



## bronks (30. Nov 2005)

@matthias:
executeBatch() verwendet man güstigerweise in Transaktionen, weil es genau darauf ankommt, daß eine Exception kommt und der ganze Kram verworfen wird.

Irgendwie hab ich einen spannenden Verdacht, wenn ich Deinen Post lesen. Was willst Du konkret erreichen und warum verwendest Du dafür executeBatch()?


----------



## matthias_ (30. Nov 2005)

hmm...ja das ist mir schon klar...ich lese in meinem Programm daten aus XML-Files heraus und schnipsel dann daraus Datensätze zusammen...Jedoch sind diese XML-Files teilweise so scheisse aufgebaut, dass teilweise Daten drinstehen die gar nicht reingehören...bisher habe ich aus faulheit alles in ne .sql datei rausschreiben lassen und das ganze dann auf einmal reingeschrieben auch wenn er ein paar fehler in der log anzeigt...

jetzt mit dem JDBC treiber dachte ich executeBatch wäre sinnvoll da ich eine Menge-Datensätze auf einmal reinschreiben kann und das doch sicherlich Performance-Vorteile bringt oder?


----------



## RicoSoft (30. Nov 2005)

Ich würde sagen, die Performance-Gewinne kriegst Du, indem Du

transaktionen verwendest
mit preparedStatements arbeitest
So kannst Du auch die Fehler sauber auffangen und zwischenspeichern oder was auch immer damit machen (demjenigen, der das XML-File geschrieben haben, zurückschicken und ihm gleich noch einmal etwas über die Idee hinter XML schreiben  )


----------



## Gast (30. Nov 2005)

zu den transaktionen...steht executeBatch für ne transaktion? oder muss man da ein "BEGIN;" executen und nachher commiten?

ja preparedStatements scheinen mir in diesem Fall auch die bessere Lösung zu sein...

Achja und zu dem XML-File...das wurde von dem Datenmodellier-Programm ERWin 4 generiert (ich denke die haben dieses XML-Export-Feature am letzten Tag noch schnell hinzugefügt )


----------

