Първо, обърквате 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 драйверът ще добави един час към клеймото за време, преди да се върне.