Primo, stai confondendo java.util
con java.sql
. Quando si utilizza PreparedStatement#setDate()
e ResultSet#getDate()
, è necessario java.sql.Date
. Analogamente, quando si utilizza PreparedStatement#setTimestamp()
e ResultSet#getTimestamp()
hai bisogno di java.sql.Timestamp
.
In secondo luogo, è importante capire che java.sql.Date
rappresenta esclusivamente la data (anno, mese, giorno) e niente di meno o di più. Questo deve essere mappato su una DATE
SQL tipo di campo. Il java.sql.Timestamp
rappresenta il timestamp (anno, mese, giorno, ora, minuto, secondo, millisecondo), esattamente come java.util.Date
e java.util.Calendar
fa. Questo deve essere mappato su un TIMESTAMP
SQL o DATETIME
tipo di campo.
Per quanto riguarda i fusi orari, è necessario quando il database non memorizza le informazioni sul fuso orario (quindi, tutti i timestamp sono archiviati in UTC (GMT)). Puoi quindi passare un Calendar
in cui contiene informazioni sul fuso orario corrente, in modo che il driver JDBC possa adattare il timestamp UTC al timestamp conforme al fuso orario. Se è ad esempio GMT+1, il driver JDBC aggiungerà un'ora al timestamp prima di tornare.