Po pierwsze, mylisz java.util
z java.sql
. Podczas korzystania z PreparedStatement#setDate()
oraz ResultSet#getDate()
, potrzebujesz java.sql.Date
. Analogicznie, przy użyciu PreparedStatement#setTimestamp()
oraz ResultSet#getTimestamp()
potrzebujesz java.sql.Timestamp
.
Po drugie, ważne jest, aby zrozumieć, że java.sql.Date
reprezentuje wyłącznie datę (rok, miesiąc, dzień) i nic mniej lub więcej. To ma być zmapowane na SQL DATE
typ pola. java.sql.sygnatura czasowa
reprezentuje sygnaturę czasową (rok, miesiąc, dzień, godzina, minuta, sekunda, milisekunda), dokładnie tak jak java.util.Date
i java.util.Calendar
czy. To ma być zmapowane na SQL TIMESTAMP
lub DATETIME
typ pola.
Jeśli chodzi o strefy czasowe, jest to potrzebne, gdy baza danych nie przechowuje informacji o strefie czasowej (dlatego wszystkie znaczniki czasu są przechowywane w UTC (GMT)). Następnie możesz przekazać Kalendarz
w którym zawiera informacje o aktualnej strefie czasowej, dzięki czemu sterownik JDBC może dostosować znacznik czasu UTC do znacznika czasu zgodnego ze strefą czasową. Jeśli jest to na przykład GMT+1, sterownik JDBC doda godzinę do znacznika czasu przed powrotem.