# Externer DB-Prozess zu schnell?



## higgy0815 (8. Sep 2009)

Hallo,

ich lade über einen Import-Befehl Daten in eine DB2 über einen externen Prozess:

```
Runtime rt = Runtime.getRuntime();
pr = rt.exec("db2cmd.exe -i c:/abc/db2_import.bat");
pr.waitFor();
```

Die Batch-Datei hat folgenden Inhalt:

```
DB2 connect to ... user ... using ...
DB2 IMPORT FROM C:/test.csv OF DEL MODIFIED BY COLDEL; METHOD P (1,2,4,6,8,9,10,3,5) INSERT INTO TABLE1(A,B,C,D,E,F,G,H,I,J)
DB2 QUIT
EXIT
```

Wie bekomme ich in eine Spalte K in Table1 einen Wert, der nicht in der Textdatei enthalten ist? Und wie kann ich an einen Wert in der Textdatei z.B. ein "A" voranstellen?

Nun da ich diese Fragen noch nicht gelöst habe (Könnt Ihr mit weiterhelfen?), mache ich natürlich Update-Abfragen im Anschluss... Ich möchte den Inhalt der Spalte K damit setzen.
Hier ist jedoch das Problem, dass das Update nichts macht, d.h. der pr.waitFor() oben bringt meiner Ansicht nach nichts.
Nur nach einem schmutzigen "Thread.sleep(2000)"-Aufruf würde es funktionieren, doch ist dies nicht zuverlässig, da ja die Import-Datei beliebig groß sein kann und 2 Sekunden vielleicht auch nicht ausreichen.

Wie kann man sonst die Java-Anwendung vor dem Update ordentlich warten lassen?
Und noch besser: Komme ich um den externen Aufruf umher und wie? Die Java/ODBC-Schnittstelle scheint den Import bzw. Load-Befehl zu ignorieren...

Vielen Dank im voraus für die Antworten,
Gruß


----------



## sparrow (9. Sep 2009)

Einfachste und unabhängigste Möglichkeit:

die .csv im Java-Programm durchlaufen und die entsprechenden Inserts in die Tabelle vornehmen.

Das hier wirkt auf mich ausgesprochen dirty.


----------



## higgy0815 (9. Sep 2009)

Klar ist das eine Möglichkeit.
Aber CSV parsen und für jede Zeile ein Insert absetzen ist doch recht zeitintensiv.
Zu was gibt einen Import-Befehl?


----------



## SlaterB (9. Sep 2009)

CSV ändern und wieder abspeichern/ kopieren und das externe Programm auf die geänderte Datei loslassen


----------



## higgy0815 (10. Sep 2009)

Hab's nach dem letzten Vorschlag realisiert. Funzt und geht recht schnell...
Vielen Dank für eure Antworten.
Das Themas kann geschlossen werden.


----------

