Първо, обърквате java.util
с java.sql
. Когато използвате PreparedStatement#setDate()
и ResultSet#getDate()
, имате нужда от java.sql.Date
. Аналогично, когато използвате PreparedStatement#setTimestamp()
и ResultSet#getTimestamp()
имате нужда от java.sql.Timestampкод>
.
Второ, важно е да разберете, че java.sql.Date
представлява самодата (година, месец, ден) и нищо по-малко или повече. Това трябва да бъде съпоставено с SQL ДАТА
тип поле. java.sql.Timestamp
представлява клеймото за време (година, месец, ден, час, минута, секунда, милисекунда), точно както java.util.Date
и java.util.Calendarкод>
прави. Това трябва да бъде съпоставено към SQL TIMESTAMP
или DATETIME
тип поле.
Що се отнася до часовите зони, имате нужда от тях, когато базата данни не съхранява информация за часовите зони (по този начин всички времеви марки се съхраняват в UTC (GMT)). След това можете да подадете Календар
в който съдържа информация за текущата часова зона, така че JDBC драйверът да може да коригира UTC клеймото към клеймото, съответстващо на часовата зона. Ако е например GMT+1, тогава JDBC драйверът ще добави един час към клеймото за време, преди да се върне.