2015-10-02 36 views
5

Chcę wstawić "0001-01-01" jako wartość do pola date za pomocą Java PreparedStatement.JDBC4 wstaw datę "0001-01-01"

Ale to rzuca wyjątek, gdy próbowałem to:

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. 

Błąd jest:

Dostarczona wartość nie jest prawidłowym wystąpienie typu danych datetime. Sprawdź dane źródłowe pod kątem nieprawidłowych wartości. Przykładem nieprawidłowej wartości są dane typu liczbowego ze skalą większą niż dokładność.

  • Jeśli nie używam PreparedStatement można wstawić "0001-01-01". Jednak wydaje się, że instrukcja przygotowania nie pozwala na wstawienie tej wartości.

  • Będzie działać, jeśli wstawię "1969-01-01" zamiast "0001-01-01".

Jakieś pomysły?

Aktualizacje: Oto więcej informacji, które mogą być potrzebne.

  1. używamy serwera SQL 2012.
  2. musimy użyć „0001-01-01”, ponieważ wartości te były już tam. Zmieniam bardzo bardzo stare kody, aby użyć instrukcji przygotowania. Więc muszę wstawić te same wartości w tej samej funkcjonalności.

Aktualizacje 2:

Dodatkowo, jestem w stanie wstawić "0001-01-01" do pola daty bez użycia instrukcji przygotować. tj.

To nie jest problem z serwerem sql lub problem z bazą danych.

+0

Spróbuj użyć innej daty do przedstawienia pustej daty, takiej jak 01-01-1900 – sagi

+0

Rzuć okiem na kod źródłowy '.valueOf (...)';) – Hannes

+1

Którego JARa sterownika JDBC używasz? jTDS lub Microsoft? I która wersja? –

Odpowiedz

0

Czy próbowałeś z nową wersją java.sql.Date (nowa data (1,1,1))?

+0

Po prostu próbowałem tego. Po pierwsze nowa Data (1,1,1) jest przestarzała. Po drugie działa bez błędów, ale przechowuje 1900-01-01 zamiast 0001-01-01. – Joey