2015-10-02 9 views
5

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.

  1. wir verwenden SQL Server 2012
  2. 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:

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.

+0

Versuchen Sie, ein anderes Datum zu verwenden, um ein leeres Datum wie 01-01-1900 darzustellen – sagi

+0

Werfen Sie einen Blick auf den Quellcode von '.valueOf (...)';) – Hannes

+1

Welche JDBC-Treiber JAR verwenden Sie? jTDS oder Microsoft? Und welche Version? –

Antwort

0

Haben Sie versucht mit neuen java.sql.Date (neues Datum (1,1,1))?

+0

Ich habe es gerade versucht. Erstens ist das neue Datum (1,1,1) veraltet. Zweitens, es funktioniert ohne Fehler, aber es speichert 1900-01-01 statt 0001-01-01. – Joey

0

Versuchen Sie es mit dem anderen geeigneten JDBC-Treiber.

Verwandte Themen