For det første forvirrer du java.util
med java.sql
. Når du bruger PreparedStatement#setDate()
og ResultSet#getDate()
, du skal bruge java.sql.Date
. Analogt, når du bruger PreparedStatement#setTimestamp()
og ResultSet#getTimestamp()
du har brug for java.sql.Timestamp
.
For det andet er det vigtigt at forstå, at java.sql.Date
repræsenterer udelukkende datoen (år, måned, dag) og intet mindre eller mere. Dette skal tilknyttes en SQL DATE
felttype. java.sql.Timestamp
repræsenterer tidsstemplet (år, måned, dag, time, minut, sekund, millisekund), nøjagtigt som java.util.Date
og java.util.Calendar
gør. Dette skal tilknyttes en SQL TIMESTAMP
eller DATETIME
felttype.
Med hensyn til tidszonerne har du brug for det, når databasen ikke gemmer tidszoneinformation (således er alle tidsstempler gemt i UTC (GMT)). Du kan derefter sende en Kalender
hvori indeholder information om den aktuelle tidszone, så JDBC-driveren kan justere UTC-tidsstemplet til tidsstemplet, der passer til tidszonen. Hvis det f.eks. er GMT+1, vil JDBC-driveren tilføje en time til tidsstemplet, før han returnerer.