Java JDBC: INSERT des aktuellen Datums(+Uhrzeit)

Mossos

Ensign
Registriert
Juni 2008
Beiträge
152
Moin zusammen!
Ich programmiere grad eine Website mit jsp (und halt Java), hab eine Datenbankanbindung zu IBM DB2 und möchte bei einem bestimmten INSERT in eine Tabelle die aktuelle Uhrzeit mit Datum mit einfügen.
Die Tabelle besteht aus den Spalten: Text(String),Zeit(Date),Name(String)

Mit dem normalen SQL Befehl über den Befehlseditor würde ich einfach dieses Statement benutzen:
INSERT INTO Status(Text,Zeit,Name) VALUES('Neuer Status',current TIMESTAMP, 'Benutzer');

(current TIMESTAMP funktioniert auch bei einem Date Format, current Date würde nur das Datum, nicht aber die Uhrzeit speichern.)

Leider kann ich current TIMESTAMP nun nicht benutzen wenn ich die SQL Anweisung mit java über JDBC ausführen will, weil wenn man statement.setString(2,"current TIMESTAMP") setzt, es zum Fehler kommt, weil er an der Stelle ein Date erwartet und keinen String.


Nun hab ich versucht einfach ein java.sql.Date zu erstellen mit System.currentTimeMillis(),
Code:
new java.sql.Date(System.currentTimeMillis());
oder auch so:
Code:
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

Doch bei beiden Methoden wird nur das Datum in der DB angezeigt, ohne Uhrzeit :(


Gibts vll ne Möglichkeit die Function current TIMESTAMP doch richtig zu übergeben? Oder irgendwelche anderen Ideen, um die Uhrzeit mit zuspeichern?


Danke schonmal!
Gruß,
Mossos.
 
Das Problem ist nicht das Date Objekt in Java. Das würde mir schon die richtige Uhrzeit ausspucken. Aber in meiner Datenbank wird die Uhrzeit nicht gespeichert sondern nur das Datum. Also wenn ich in meiner DB Datum + Uhrzeit gespeichert habe, kann ich das in Java auch richtig ausgeben.
Nur halt andersrum klappt es nicht.
 
Ich hoffe ich habs richtig verstandem. Du übergibst quasi deiner DB 23/02/2011 14/10/49 aber sie speichert nur das Datum und nicht die Uhrzeit?

Welchen Datentyp hat denn dein Date Feld in der Datenbank. Akzeptiert das maybe keine Leerzeichen und schneidet deshalb den String da ab.

Ich würde ein Datum immer in millisekunden abspeichern. Dann kannst du es je nachdem wie du es für diene Anwendung gerade brauchst in das richtige Format konvertieren.
Oder notfalls in einem eigenen Format wie z.B. 20110223141049.
 
das Date-Feld in ner mysql-DB speichert immer nur Datum ab, soweiti ch mich erinnere.
Ev. wäre der Feldtyp Timestamp was für dich - da kannste dann übrigens auch current_timestamp als Standardwert einstellen und muss nicht in java rumturnen ;)
 
Benutze doch Datum/Uhrzeit des Datenbankservers und nicht die des Java Clients, also etwa so:

PreparedStatement insert = con.prepareStatement(
"INSERT INTO Status(Text,Zeit,Name) VALUES(?,current TIMESTAMP, ?);" );
insert.setString( 1, "status" );
insert.setString( 2, "user" );
 
@ de-ich:
Der Datentyp der Zeit-Spalte ist "Date" ....Deine Idee find ich ein bisschen haky mit Millisekunden (und dann als long abspeichern?) als Zeitangabe zu speichern. ^^ Außerdem gibts da noch einen Trigger der auch INSERTS auf der Tabelle durchführt, wüsste nicht wie ich dem das beibringen soll die millisekunden der aktuellen Zeit zu kriegen.

@KeepXtreme:
Also in DB2 kann der auch die Uhrzeit abspeichern, allerdings halt nur mit dem Befehl current TIMESTAMP.

Ah hast mich aber nochmal dazu gebracht, genauer nach DEFAULT values zu gucken. Hatte anfangs bei DB2 nicht geklappt (Funzt anscheinend nicht zusammen mit NOT NULL..)

@r0b0t:
Ah daran hab ich noch garnicht gedacht :P

Danke schonmal für die Antworten ich probier mal was aus!

____________
EDIT:
So, hab eigentlich ne ganz einfache Lösung:
Die Spalte geändert in:
(...)
Zeit TIMESTAMP NOT NULL WITH DEFAULT,
(...)
So generiert mir die DB den current TIMESTAMP, falls selber nichts eingegeben wurde.
 
Zuletzt bearbeitet:
Sry ich meinte natürlich die Sekunden nicht Millisekunden.
Das ist Defaktor die flexibelste Möglichkeit ein Datum zu speichern, weil man es in der Anwendung in jedes Format konvertieren kann was man gerade will. Mal nur Jahr und Monat, dann nur den Tag usw.
SECOND (current timestamp). Damit solltest du die Sekunden bekommen.

ist nur eine Anregung, weil ich es schöner handelbar finde als da mit Strings zu arbeiten. Es erleichtert auch SQL Anfragen.

Der Datentyp "Date" ist übrigens nur in der Lage das Datum zu speichern. Für Uhrzeit gibt es noch den Extra Typ "Time". Wenn du Datum und Uhrzeit haben willst brauchst du den Typ "TimeStamp", den du in deiner Lösung ja verwendest.
 
Ja ich war auch erstaunt aber in DB2 kann Date tatsächlich auch die Uhrzeit speichern. Man muss nur die Function current TIMESTAMP benutzen. Bei current Date wird die Uhrzeit dann natürlich nicht gespeichert..
DB2 ist eh blöde :p
 
Zurück
Oben