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.
- używamy serwera SQL 2012.
- 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:
- Używamy "data" typ danych, a nie "datetime" typ danych. Na podstawie tego https://msdn.microsoft.com/en-us/library/bb630352.aspx "0001-01-01" nie jest poza zakresem dla pola "data".
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.
Spróbuj użyć innej daty do przedstawienia pustej daty, takiej jak 01-01-1900 – sagi
Rzuć okiem na kod źródłowy '.valueOf (...)';) – Hannes
Którego JARa sterownika JDBC używasz? jTDS lub Microsoft? I która wersja? –