Java & MS SQL-Datetime

Status
Nicht offen für weitere Antworten.

gladiator09

Bekanntes Mitglied
hey leute!

hab ein programm, welches mir aus einem csv-feld ein datum ausliest und dieses will ich am MS SQL server speichern!

Code:
int jahr = Integer.parseInt(datum.substring(0, 3));
            int monat = Integer.parseInt(datum.substring(4, 5));
            int tag = Integer.parseInt(datum.substring(6, 7));
            GregorianCalendar calendar = new GregorianCalendar(jahr, tag, monat);
            java.sql.Date date = new java.sql.Date(calendar.getGregorianChange().getTime());
            return date;

das wirft mir immer eine sqlexception: "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."

das funktioniert:

Code:
int jahr = Integer.parseInt(datum.substring(0, 3));
            int monat = Integer.parseInt(datum.substring(4, 5));
            int tag = Integer.parseInt(datum.substring(6, 7));
            GregorianCalendar calendar = new GregorianCalendar(jahr, tag, monat);
            java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
            return date;

also mit currentTimeMillis funktionierts und mit dem Calendar nicht!

woran kann das liegen?

lg,
alex[/code]
 

Ebenius

Top Contributor
Hinweis 1: Datum parsed man am besten mit DateFormat.parse(String) (die abgeleitete Klasse SimpleDateFormat ist auch oft nützlich).

Hinweis 2: Du hast in Zeile 4 Monat und Tag vertauscht. :lol: Da kommt bestimmt der erste Tag des Monats siebenundzwanzig raus. Und das haut Dir dann die DB um die Ohren.
 

gladiator09

Bekanntes Mitglied
ok danke... aber das problem war auch noch: ich hab beim sql-statement die variable in einfache anführungszeichen gesetzt...

aber wenn ich jetzt mein statement änder (also so wie du gesagt hast, monat und tag austauschen), dann kommt bei einem string-wert von "20090114" in der DB das datum 16.07.1900 raus?! *gg*

bzw. habe bei monat noch 1 dazugezählt!

Code:
int jahr = Integer.parseInt(datum.substring(0, 3));
            int monat = Integer.parseInt(datum.substring(4, 5));
            int tag = Integer.parseInt(datum.substring(6, 7));
            GregorianCalendar calendar = new GregorianCalendar(jahr, monat+1, tag);
            java.sql.Date date = new java.sql.Date(calendar.getTime().getTime());
            return date;

lg,
alex
 

Ebenius

Top Contributor
SQL-Date würde ich so ähnlich aufbauen:
Code:
try {
  final java.util.Date date =
        new SimpleDateFormat("yyyyMMdd").parse("20080126");
  System.out.println(new java.sql.Date(date.getTime()));
} catch (ParseException ex) {
  ex.printStackTrace();
}

Wo/wie baust Du denn das Statement auf?
 

gladiator09

Bekanntes Mitglied
ok, hab das jetzt so geschrieben wie du, bekomme aber:

Unparseable Date: "20081211"

statement:

Code:
s.executeUpdate("INSERT INTO sxa.Rechnungen (r_id, r_mitarbeiter, r_datum) VALUES ('" + rid + "', '" + rs.getString("m_id") + "', " + date + ")");

date wird an einer anderen stelle mit der oben geschriebenen methode "befüllt"

lg,
alex
 

Ebenius

Top Contributor
Das Problem ist das "+ date +". Wenn Du sowas machst, brauchst Du gar kein java.sql.Date zu benutzen. :)

Ansonsten schließe ich mich dem Vorredner an. Für PreparedStatements ist java.sql.Date super.
 

gladiator09

Bekanntes Mitglied
naja, habe es jetzt so:

Code:
int jahr = Integer.parseInt(datum.substring(0, 3));
            int monat = Integer.parseInt(datum.substring(4, 5));
            int tag = Integer.parseInt(datum.substring(6, 7));
            GregorianCalendar calendar = new GregorianCalendar(jahr, monat+1, tag);
            //java.util.Date date = new SimpleDateFormat("yyyyMMdd").parse(datum);
            return new java.sql.Date(calendar.getTimeInMillis());

Code:
ps = cn.prepareStatement("INSERT INTO sxa.Rechnungen (r_id, r_mitarbeiter, r_datum) VALUES (?, ?, ?)");
                                    //s.executeUpdate("INSERT INTO sxa.Rechnungen (r_id, r_mitarbeiter, r_datum) VALUES ('" + rid + "', '" + rs.getString("m_id") + "', " + date + ")"); // timestamp fehlt noch
                                    ps.setString(1, rid);
                                    ps.setString(2, rs.getString("m_id"));
                                    ps.setDate(3, date);
                                    ps.execute();

und jetzt kommt diese exception:

com.microsoft.sqlserver.jdbc.SQLServerException: The incoming tabular data strea
m (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 6 ("
"): The supplied value is not a valid instance of data type datetime. Check the
source data for invalid values. An example of an invalid value is data of numeri
c type with scale greater than precision.
 

Ebenius

Top Contributor
Bitte gib mal den gesamten StackTrace aus. Poste Deinen entsprechenden Source-Code. Die Zeilennummern aus dem StackTrace überprüfen und mit dazuschreiben!
 

gladiator09

Bekanntes Mitglied
com.microsoft.sqlserver.jdbc.SQLServerException: The incoming tabular data strea
m (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 6 ("
"): The supplied value is not a valid instance of data type datetime. Check the
source data for invalid values. An example of an invalid value is data of numeri
c type with scale greater than precision.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError
(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown
Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePrep
aredStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecC
md.doExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unkno
wn Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknow
n Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unkn
own Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate
(Unknown Source)
at mat.Main.egonEinlesen(Main.java:292)
at mat.Main.main(Main.java:428)


Code:
try
                                {
                                    ps = cn.prepareStatement("INSERT INTO sxa.Rechnungen (r_id, r_mitarbeiter, r_datum) VALUES (?, ?, ?)");
                                    //s.executeUpdate("INSERT INTO sxa.Rechnungen (r_id, r_mitarbeiter, r_datum) VALUES ('" + rid + "', '" + rs.getString("m_id") + "', " + date + ")"); // timestamp fehlt noch
                                    ps.setString(1, rid);
                                    ps.setString(2, rs.getString("m_id"));
                                    ps.setDate(3, date);
                                    ps.executeUpdate(); // --> zeile 292
                                }
                                catch (Exception e)
                                {
                                    rid = null;
                                    e.printStackTrace();
                                }

Code:
public java.sql.Date getSQLDate(String datum)
    {
        try
        {
            int jahr = Integer.parseInt(datum.substring(0, 3));
            int monat = Integer.parseInt(datum.substring(4, 5));
            int tag = Integer.parseInt(datum.substring(6, 7));
            GregorianCalendar calendar = new GregorianCalendar(jahr, monat+1, tag);
            //java.util.Date date = new SimpleDateFormat("yyyyMMdd").parse(datum);
            return new java.sql.Date(calendar.getTimeInMillis());

        }
        catch (Exception e)
        {
            error(e);
        }

        return null;
    }
 

gladiator09

Bekanntes Mitglied
der typ vom datenfeld in der DB ist aber datetime... und das lustige daran is: wenn ich java.sql.date(System.currentTimeMillis()) returne, dann schreibt er das heutige datum einwandfrei in die datenbank ;)
 

Ebenius

Top Contributor
Haste's mit setTimestamp probiert? Natürlich hat's vorhin super geklappt; vorhin hast Du ja auch Strings reingeschrieben. Probier's mit setTimestamp!
 

gladiator09

Bekanntes Mitglied
mit setTimestamp und dem date??

hab mir jetzt in der methode mal das ausgeben lassen:

Code:
System.out.println(System.currentTimeMillis());
            System.out.println(calendar.getTimeInMillis());

hat dieses hier zur folge:

1233063837714
-55853197200000

nur woran liegt das?

lg,
alex
 

gladiator09

Bekanntes Mitglied
hab jetzt das dateformat genommen und jetzt kann ers komischerweise parsen, wo er vorher einen fehler geschrieben hat!

Code:
try
        {
            java.util.Date date = new SimpleDateFormat("yyyyMMdd").parse(datum);
            return new java.sql.Date(date.getTime());
        }

danke für eure mühe :)

lg,
alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
U SQL Server mit Java verbinden Datenbankprogrammierung 5
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Noobfrage: Konvertierung von SQL-Datentyp 'timestamp with time zone' in Java-Datentyp Datenbankprogrammierung 3
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
berserkerdq2 Foreign key einstellen java Datenbankprogrammierung 4
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Slaylen Java List Suchen mit eigenem Generischen Datentyp Datenbankprogrammierung 10
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
N java SQL JAR - Probleme Datenbankprogrammierung 18
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
T Java Spiel Daten speichern Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
L Mybatis Datenbankabfragen in Java Datenbankprogrammierung 1
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
S Datenbank MySQL und Java Datenbankprogrammierung 8
S Beispiel-Blockchain + GUI mit Java erstellen Datenbankprogrammierung 0
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
Trèfle SQLite SQL-Java Änderungen ausgeben Datenbankprogrammierung 1
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
A MySQL Select und Insert in Java Datenbankprogrammierung 15
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
B CSV in Java einbinden und Rechnung Datenbankprogrammierung 7
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
S Datenbank/Java true/false Datenbankprogrammierung 8
S Java und SQL-Befehle Datenbankprogrammierung 6
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L Datenbankprogrammierung mit Java und phpMyAdmin Datenbankprogrammierung 4
Korvinus Java mit Cassandra verbinden Datenbankprogrammierung 18
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
D Installation von MariaDB in java und eclipse Datenbankprogrammierung 2
H Datenbank Export mit Java Datenbankprogrammierung 3
I MariaDB-Verbindung in JAVA Datenbankprogrammierung 11
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
W Daten in Java intern abfragen Datenbankprogrammierung 1
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
D Java Datenbanken Datenbankprogrammierung 1
Y H2 H2 foreign key in Spark Java ausgeben Datenbankprogrammierung 1
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
W Wie liest dieses Java-Programm der Compiler? Datenbankprogrammierung 3
K Java Datenbank auslesen Datenbankprogrammierung 8
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K HSQLDB .sql Script Aufruf über Java Datenbankprogrammierung 7
B Java Programm und Dantebank umlagern Datenbankprogrammierung 25
B MySQL bplaced Datenbank mit Java ansprechen Datenbankprogrammierung 11
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
O PostgreSQL Java Row Index erhalten Datenbankprogrammierung 1
dzim Cassandra Cluster DB und der Java-Treiber Datenbankprogrammierung 1
H Entity in Java implementieren Datenbankprogrammierung 13
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
D MySQL Many to Many Tabellen in Java abbilden? Datenbankprogrammierung 4
P Datanbank für Java-Programmierung Datenbankprogrammierung 10
F Java SQLite Error Datenbankprogrammierung 19
F SQL Datenbank an Java Code anbinden Datenbankprogrammierung 5
J Java 8 und Microsoft Access Database-Dateien(mdb) Datenbankprogrammierung 1
H HSQLDB Beim öffnen folgender Fehler: ... java.lang.NullPointerException Datenbankprogrammierung 1
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
M Verbindung von Java Programm zur Acccess Datenbank (mdb-Datei) Datenbankprogrammierung 0
M Feedback für neues Buch über "Java und Datenbanken" erwünscht Datenbankprogrammierung 8
M Wie übergebe ich Datenbankobjekte aus einer sql-Datenbank einer Java Klasse bzw. Instanz Datenbankprogrammierung 7
D Zeit von SQL nach Java Datenbankprogrammierung 2
M JAVA Derby INSERT probleme Datenbankprogrammierung 12
M Java Datenbankanbindung funktioniert nicht Datenbankprogrammierung 4

Ähnliche Java Themen


Oben