Java, SQL Server & Probleme mit Datetime

Lautsprecher

Erfahrenes Mitglied
Hi,
ich habe so einen ähnlichen Beitrag schon mal unter SQL gepostet, aber bis jetzt konnte ich mein Problem immer noch nicht lösen. Ich hoffe, dass vielleicht jemand von Euch weiter weiß, denn dieses Problem drückt schon ziemlich auf dem Schuh.

Ich versuche unter Java mit folgender Anweisung einige Daten in unsere Tabelle auf dem MS SQL Server zu schreiben:

Code:
String insertString = 
"INSERT INTO Zeiterfassung_test (employee_ID, check_in_date, 
                        check_in_time, " +   
                       "group_id, shift, Host_Id, status,
                       working_time, pause)" + 
 "VALUES ('"+personalnr_ein+"','"+datkommen_ein+"',
              '     "+zeitkommen_ein+"','"+gruppenauswahl+"', 
                    '"+schicht+"', '', '1', '', '')";
			    
st.executeUpdate(insertString);

In datkommen_ein steht: 04.11.2005
In zeitkommen_ein steht: 13:41:00

check_in_date, check_in_time, haben alle den Type datetime in der SQL Datenbank!

Beim Ausführen des Statements steht dann folgendes in der Datenbank:

check_in_date 04.11.2005
check_in_time: 01.01.1900 13:41:00
Frage: Wie bekommt man das 01.01.1900 aus der Datenbank raus?

Wir sind jetzt schon soweit, dass wir vermuten, es müsse eingentlich an den Einstellungen in der Table auf dem SQL Server liegen. Wenn ich das Feld check_in_time als smalldatetime konvertiere, hat das keine Auswirkungen. Es steht immer noch 01.01.1900 davor. Mache ich char steht nur noch 13:41:00 drin. Da wäre soweit auch super, nur das Problem ist, das verschiedene VB Programme auch auf diese Tabelle zu greifen und direkt datetime auslesen. Alle VB-Pgm auf char-Einlesen zu änderen wäre Wahnsinn.

Außerdem wundere ich mich warum, dies nur beim schreiben mit Java auftritt!
Schreiben wir die Selben Werte mit einem VB-Pgm steht in
check_in_time nur 13:41:00 drinnen.

Hier ein Auszug aus dem VB-Pgm:

Code:
If kommen = True Then
                     Text1.Text = Date
                     Text2.Text = time
                     Text5.Text = mitarbeiter.name
                     Text6.Text = mitarbeiter.Personalnummer
                     Call warten(1)
     rs_zeiterfassung.Open "Zeiterfassung", objConn, adOpenKeyset
      With rs_zeiterfassung
            .AddNew
            !employee_ID = mitarbeiter.Personalnummer
            !check_in_time = Text2.Text
            !check_in_date = Text1.Text
            !group_id = group
            !Shift = schicht
            !host_id = ""
            !Status = 1
            .update
      End With
      rs_zeiterfassung.Close
      
      Call ausfallzeiten_summe
      Call dsatzausgabe
      Exit Sub
End If

Warum das? Liegt das Problem vielleicht darin das VB den ODBC-Driver verwendet und
Java JDBC?


Deswegen meine Frage: Kann ich irgendwie in meinem Java-Pgm was machen, damit in der DB nur noch die Zeit und nicht der (Standardwert 01.01.1900) mit hinein geschrieben wird?


Danke
 
Hallo!

In der Dokumentation zum SQL Server 2000 steht unter anderem, dass
es keine seperaten Datentypen zum speichern von Datumswerten ohne Zeitangabe oder von Zeitangaben ohne Datumswerte gibt. Wenn bei einem datetime oder einem smalldatetime Wert nur die Zeit angegeben wurde wird als dazugehöriger Datumswert automatisch der 1.1 1900 gesetzt. Falls nur das Datum angegeben ist, wird als Zeitwert 12:00 Mittags (AM) gesetzt.

Also verhält sich Java und der JTDS Treiber vollkommen korrekt...

Gruss Tom
 
Wie verhindert man die Ausgabe 01.01.1900 auf dem SQL Server

Hallo Thomas,
wir habe jetzt ein wenig rumgetüfftelt und sind auf folgendes SQL-Statement
gestoßen:

Code:
String insertString = "INSERT INTO Zeiterfassung_test (employee_ID, check_in_date,   
     check_in_time, group_id, shift, Host_Id, status, working_time, pause)" +
    "VALUES ('"+personalnr_ein+"','"+datkommen_ein+"',
     Convert(varchar(10),getDate(),104),'"+gruppenauswahl+"', '"+schicht+"', '', '1', '', '')
st.executeUpdate(insertString);

Das komische ist mit varchar(10) und 104 schreibt er mir das heutige Datum ohne die Zeit rein! Erstmal Juhu!!

ABER:
versuche ich es mit varchar(8) und 108, was normalerweise für die Konvertierung der Zeit steht, schreibt er wieder 01.01.1900 .
Wieso zieht er beim ersten Statement aber nicht mit 108?

Grüße
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück