Ich möchte "0001-01-01" als Wert in ein Feld mit Java PreparedStatement
einfügen.JDBC4 Datum einfügen "0001-01-01"
Aber es löst eine Ausnahme, wenn ich das versucht:
String sql = "insert into mytable values(?)"
ps = conn.prepareStatement(sql);
ps.setDate(1, java.sql.Date.valueOf("0001-01-01"));
ps.executeUpdate(); // throws exceptions here.
Der Fehler ist:
Der angegebene Wert ist keine gültige Instanz von Datentyp Datetime. Überprüfen Sie die Quelldaten auf ungültige Werte. Ein Beispiel für einen ungültigen Wert sind Daten des numerischen Typs mit einem Maßstab größer als die Genauigkeit.
Wenn ich nicht PreparedStatement verwenden, kann ich "0001-01-01" ein. Vorbereitungsanweisung scheint jedoch nicht zu erlauben, diesen Wert einzufügen.
Es funktioniert, wenn ich "1969-01-01" anstelle von "0001-01-01" eingefügt habe.
Irgendwelche Ideen?
Aktualisierungen: Hier sind weitere Informationen, die möglicherweise benötigt werden.
- wir verwenden SQL Server 2012
- müssen wir „0001-01-01“ verwenden, da diese Werte bereits dort waren. Ich ändere einige sehr sehr alte Codes, um prepare statement zu verwenden. Also muss ich dieselben Werte in die gleiche Funktionalität einfügen.
Updates 2:
- Wir verwenden "Datum" Datentyp nicht "Datetime" Datentyp. Basierend auf dieser https://msdn.microsoft.com/en-us/library/bb630352.aspx, "0001-01-01" ist nicht außerhalb des Bereichs für "Datum" Feld.
Darüber hinaus kann ich "0001-01-01" in das Datumsfeld einfügen, ohne Prepare-Anweisung zu verwenden. d. h.
String sql = "insert into mytable values('0001-01-01')"
java.sql.Statement statement = conn.createStatement();
statement.executeUpdate(sql);
So ist es nicht sql Server Problem oder db Feld Problem.
Versuchen Sie, ein anderes Datum zu verwenden, um ein leeres Datum wie 01-01-1900 darzustellen – sagi
Werfen Sie einen Blick auf den Quellcode von '.valueOf (...)';) – Hannes
Welche JDBC-Treiber JAR verwenden Sie? jTDS oder Microsoft? Und welche Version? –