# Problem mit Datums-Format bei UPDATE



## Guest (13. Aug 2004)

Hi all.

Ich schreibe zu Übungszwecken gerade ein kleines Programm, mit dem man Bücher ausleihen kann. Bei der Ausleihe stoße ich aber auf folgendes Problem.

Ich bastel mit ein UPDATE-String zusammen

```
if (zeile.toUpperCase().equals("J")) {
    Calendar c = Calendar.getInstance();
    String aus   = Integer.toString(c.get(Calendar.YEAR)) + "-" + 
                   Integer.toString(c.get(Calendar.MONTH)+1) + "-" +
                   Integer.toString(c.get(Calendar.DATE));
    String rueck = Integer.toString(c.get(Calendar.YEAR)) + "-" +
                   Integer.toString(c.get(Calendar.MONTH)+2) + "-" +
                   Integer.toString(c.get(Calendar.DATE));
                        	
    query_string = "UPDATE biblio_exausleihe SET Lesernr = " + lesernummer +
                   ", Ausleihdatum = '" + aus + "', Rueckgabedatum = '" + rueck +
                   "' WHERE Inventarnr = " + inventarnummer;
                        	
    System.out.println(query_string);
                        	
    myStatement.executeUpdate(query_string);
                        	
    myConnection.commit();
    System.out.println("OK! Das Buch wurde ausgeliehen.\n");
}
```

... bekomme aber folgende Fehlermeldung:

```
Exception caught.
java.sql.SQLException: ORA-01861: literal does not match format string
```

Was ich rausgefunden habe ist, daß es Probleme mit dem Datum gibt. Mein gebastelter UPDATE-String sieht folgendermaßen aus:

```
UPDATE biblio_exausleihe SET
    Lesernr = 1000,
    Ausleihdatum = '2004-8-13',
    Rueckgabedatum = '2004-9-13'
WHERE Inventarnr = 3
```

Ich hoffe, mir jemand von Euch helfen... Es muß eigentlich ein Problem beim Übertragen von Java zu Oracle bestehen, oder ???

Bis denne, Mike

PS: Und DANKE schon mal...


----------



## DP (13. Aug 2004)

keine ahnung. bin aus oracle schon zu lange raus. evtl. liegt es an der einstelligen monatsangabe?


----------



## akira (13. Aug 2004)

Hi,

mit Datumsformaten gibt es häufig Probleme, da hat jede DB so ihre Eigenarten. Aus meiner Erfahrung gibt es zwei andere Möglichkeiten ein Datum zu speichern, damit es unabhängig von der verwendeten DB ist:

1. Statt des Datums wird der Timestamp als long gespeichert. Mit Timestamp meine ich den Wert, den Du erhälst, wenn Du auf einem Date-Objekt getTime() aufrufst. Damit wird auch die genaue Zeit bis in den Millisekundenbereich mitgespeichert.  Der Nachteil hierbei ist, daß man keine Datumsangaben vor dem 1.1.1970 benutzen kann.

2. Du definierst Dir ein Format, so ähnlich wie Du es schon getan hast und speicherst dieses als normalen String. Zum Zusammenbasteln und Parsen bietet sich übrigens die Klasse SimpleDateFormat an. Der Nachteil bei der Methode ist jedoch, das man auf der Spalte keine Datumsvergleichsfunktionen ausführen kann.


----------



## akira (13. Aug 2004)

Mir fällt gerade ein, daß es noch eine bessere Möglichkeit gibt:

Benutze einfach ein PreparedStatement, da ergibt sich dieses Konvertierungsproblem erst garnicht.


----------

