simo2009 Geschrieben 18. Januar 2010 Teilen Geschrieben 18. Januar 2010 Hi alle, Ich habe ein JDBC Programm geschrieben, welches zwei Spalten alle Datensätze einer Tabelle "history" (SQL Server2000) liest und auf der Konsole ausgibt hier das programm: package ok.test; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import com.microsoft.sqlserver.jdbc.SQLServerDataSource; import com.microsoft.sqlserver.jdbc.SQLServerException; public class TestHistory { private static Connection con=null; private static PreparedStatement stmt=null; private static ResultSet rs=null; static Connection connectDB() throws SQLServerException{ SQLServerDataSource mds=new SQLServerDataSource(); mds.setPassword("admin"); mds.setUser("sa"); mds.setURL("jdbc:sqlserver://localhost:1433;databaseName=OKBODATA1"); Connection con =mds.getConnection(); return con; } public static String getDateText(int d){ SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy"); String result = df.format(d); return result; } public static void main(String args[]) throws SQLException{ con = connectDB(); stmt = con.prepareStatement("SELECT * FROM history"); rs = stmt.executeQuery(); while(rs.next()){ int UsrKey = rs.getInt("UsrKey"); int Datum = rs.getInt("Datum"); String datum = getDateText(Datum); System.out.println("User key :" +UsrKey+ "|" +datum); } } } und hier ein Auszug aus der Konsolenausgabe: User key :69| Datum:01.01.1970 User key :69| Datum:01.01.1970 User key :69| Datum:01.01.1970 User key :69| Datum:01.01.1970 User key :69| Datum:01.01.1970 User key :69| Datum:01.01.1970 User key :69| Datum:01.01.1970 User key :69| Datum:01.01.1970 User key :2| Datum:01.01.1970 User key :2| Datum:01.01.1970 Das Problem: Mein Vorgänger, der die Tabelle history entwicklelt hat, hat dummerweise das Datum als int definiert(z.B Datum=75155). und ich will das Datum Feld in eine lesbare Form z.B : yyyy.MM.dd o.ä umwandeln. Dafür habe ich die methode getDateText(int) entwickelt (die hat in einem anderen Programm mit long statt int problemlos funktionniert), aber wie man sieht gibt bei allen Datensätzen das gleiche Datum (01.01.1970) aus, was natürlich nicht stimmt. Bin dankbare für jede Hilfe. googlen hat nicht vieles gebracht leider. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 18. Januar 2010 Teilen Geschrieben 18. Januar 2010 Das ist weder ein JDBC noch Java Problem. Das ist ein Problem Deiner Interpretation des Wertes. Wenn ein Timestamp "irgendwie" als Int gespeichert wird, dann wird Dir hier sicher auch niemand sagen können, wie Du diesen wieder in ein lesbares Datum formatiert bekommst. Eine Lösung, die ich vielleicht durch meine Glaskugel habe, wäre die Speicherung als Unix Timestamp Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 19. Januar 2010 Teilen Geschrieben 19. Januar 2010 Um es deutlicher als flashpixx zu formulieren: Deine Werte sind - wenn Du sie als Timestamps im gebräuchlichen Sinne interpretierst (Anzahl Millisekunden seit 01.01.1970) - korrekt. Dein Beispielwert 75155 ist nunmal nur der Zeitpunkt 0:01:15,775 am 01.01.1970. Wenn die anderen Werte ähnlich klein sind (< 86400000), sind es halt alles irgendwelche Zeiten an diesem Tag. Finde heraus, wie der Integerwert decodiert werden muss, damit man das Datum auslesen kann (evtl. "Anzahl Tage seit irgendwann" anstatt "Anzahl Millisekunden seit irgendwann"). Peter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
VaNaTiC Geschrieben 19. Januar 2010 Teilen Geschrieben 19. Januar 2010 Hmm, bist Du Dir sicher, dass das Datum auch in der DB nur ein "int" ist? Denn ein int in Java ist 32bit mit Vorzeichen. Kann durchaus sein, wie z.Bsp. auch bei MySQL, dass da zwar int im DB-Admin-Tool steht, aber tatsächlich die Größe z.Bsp. 8-Stellen, 16-Stellen oder BIGINT oder sonstwas. Dann könntest Du das auch bequem als long auslesen. Wenn Du mit einem DB-Tool direkt auf die history-Table schaust, ist dann das Datum gleich zu Deinem Abfrageergebnis? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.