# Java und dBase -> Date



## Jonnsn (10. Apr 2007)

Hallo

Ich versuche mich gerade an einem Programm dass bestimmte termine erzeugen soll und die Ergebnisse in eine dBase Tabelle schreiben soll.

Das Feld in der Datenbank ist vom Typ Date (Formatierung: yyyy-MM-dd). Die Variable "b" die ich einfügen will ist (in Java!) auch vom Typ Date.
Der SimpleDateFormat-befehl df2 ergibt das Format yyyy-MM-dd.

Ich habe folgendem Befehl versucht:

```
stmt.executeUpdate("INSERT INTO TERMIN1 (DATUM) VALUES (" + df2.format(b) + ");");
```
Der befehl (als String) ergibt das hier:


> INSERT INTO TERMIN1 (DATUM) VALUES (2007-04-09);



Nun wird zwar ein Wert in die DB geschrieben -  dieser lautet jedoch:


> 1905-06-16


:?

Kann mir jemand sagen wie dieser Wert zustande kommt?

habe es inzwischen auch mit

```
java.sql.Date b = new java.sql.Date(a.getTime().getTime());
```
versucht wobei a ein GregorianCalendar ist (mein im eigentlichen programm genutztes Datum).
Die Abfrage da dann:

```
"INSERT INTO TERMIN1 (DATUM) VALUES (" + b + ");
```

aber das gleiche Ergebnis...

Hoffe jemand kennt da eine Lösung - Vielen Dank schonmal allen die sich damit beschäftigen!

PS: Bitte keine Versuche mich von dBase wegzubrigen  das Programm ist nicht für mich... es soll so funktionieren und eben nicht anders


----------



## André Uhres (10. Apr 2007)

Versuch's mal mit PreparedStatement und java.sql.Date:

```
PreparedStatement pstmt = con.prepareStatement("INSERT INTO TERMIN1 (DATUM) VALUES (?);");
        GregorianCalendar cal = new GregorianCalendar();
        cal.set(2007, 3, 9);//2007-04-09
        long millis = cal.getTimeInMillis();
//        long millis = new java.util.Date().getTime();
        java.sql.Date datum = new java.sql.Date(millis);
        pstmt.setDate(1, datum);
        pstmt.executeUpdate();
        pstmt.close();
```


----------



## Jonnsn (10. Apr 2007)

Ja wunderbar... so gings.
Wenn ich jetzt noch meinen Fehler verstehen würde wärs das Optimum


----------



## Gast (12. Apr 2007)

Ich hab selbst noch nicht konkret mit DBase gearbeitet - aber die Ursache könnte darin liegen, dass so ziemlich jedes Datenbanksystem Datumswerte anders übergeben bekommen möchte. Beim Prepared-Statement kümmert sich der Treiber drum


----------

