BatchUpdateException für falsche Datumsformate anstatt SQLServerException

piro

Aktives Mitglied
Schönen guten Tag,

ich habe ein Program, was einen Massenupload aus einer CSV Datei in eine SQL 2005 DB durchführt. Dafür verwende ich PreparedStatements mit der Methode addBatch. Wenn eine gewissen Anzahl erreicht ist, führe ich das PreparedStatement aus.

Java:
PreparedStatement pst = null;
...
try
  pst = con.prepareStatement(pstmt.toString());
  ...
  pst.addBatch(); 
  pst.clearParameters();
  ...
  // Execute batch and commit changes after we processed
  // enough data, only.
  if (numExecutedStatements % numBatchRows == 0) {
    pst.executeBatch();
    pst.clearBatch();
   con.commit();
  }
  ...
} catch (BatchUpdateException e) {
  int[] updateCounts = e.getUpdateCounts();
  ...
} catch (SQLException e) {		
  ...
}

Ich verwende die BatchUpdateException, um Fehler beim ExecuteBatch abzufangen und dann die Anzahl der verarbeiteten Statements zu ermitteln, um später eine Log wegzuschreiben.
Das funktioniert auch super z.B. wenn der Wert aus der Datei größer ist als das DB Feld (varchar).

Wenn aber ein Datumswert im Format yyyyMMdd übergeben werden soll und der Wert aus der CSV Datei wie folgt aussieht:
Code:
00101129 // sollte eigentlich 20101129 sein --> Datenfehler
kommt leider eine SQLServerException und somit bin ich nicht mehr in der Lage, die schon verarbeiteten PreparedStatements zu zählen.

Kennt einer dieses Problem? Oder weiß eine Lösung, wie ich auch mit einer SQLServerException die verarbeiteten PreparedStatements zählen kann?

Vielen Dank im Voraus. Ich hoffe, ich habe es nicht zu kompliziert erklärt.

Sven
 
Willst du wirklich wissen wieviele er verarbeitet hat, oder nur sicherstellen dass du keine mehrfach machst?

Im zweiten fall einfach ne Transaktion drum machen, wenn dort was fehlschlägt, müsste der server die komplett abbrechen und gar nichts ändern.
 
Zuletzt bearbeitet:
Ich möchte wissen wieviele Zeilen aus der Textdatei verarbeitet wurden, damit ich bei fehlerhafte Daten ein Log wegschreiben kann, was mir dann genau die Zeile und die SQL Exception anzeigt.

Ich habe Textdateien die ca. 1.000.000 Datensätzen mit vielen Feldern groß sind, da ist es schwer den fehlerhaften Datensatz zu finden. :rtfm:

Noch zur Info, es handelt sich hier um eine Art Bulk Insert. Zuerst werden alle Sätze gelöscht und dann alles wieder hereingeladen. Die Basis der Datei ist immer die Textdatei. Es ist ein Schnittstellenprogram.

Sven
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben