Oracle
 sql >> Database >  >> RDS >> Oracle

ResultSet.getTimestamp(data) vs ResultSet.getTimestamp(data, Calendar.getInstance(tz))

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.