Zum Inhalt springen

Jdbc


simo2009

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...