2010-04-06 11 views
9

java.util.Date, java.util.Timetamp sembra causare grande confusione per molti. All'interno di StackOverflow ci sono così tante domande, purtroppo la mia domanda è un po 'distorta.ResultSet.getTimestamp ("data") vs ResultSet.getTimestamp ("data", Calendar.getInstance (tz))

Ci sono 2 API JDBC. Come dovrebbero esibirsi? C'erano delle consistenze tra gli RDBMS?

ResultSet.getTimestamp("dateColumn") 
ResultSet.getTimestamp("dateColumn", Calendar.getInstance(tz)) 

Se qualcuno ha conoscenza in Sybase, potresti condividere la tua esperienza?

risposta

23

In primo luogo, si confonde 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() è necessario java.sql.Timestamp.

In secondo luogo, è importante capire che java.sql.Date rappresenta solo la data data (anno, mese, giorno) e niente di meno o più. Questo deve essere associato a un tipo di campo SQL DATE. java.sql.Timestamp rappresenta la data/ora (anno, mese, giorno, ora, minuto, secondo, millisecondo), esattamente come fa lo java.util.Date e java.util.Calendar. Questo deve essere associato a un tipo di campo SQL TIMESTAMP o DATETIME.

Per quanto riguarda i fusi orari, è necessario quando il database non memorizza le informazioni sul fuso orario (quindi, tutti i timestamp sono memorizzati in UTC (GMT)). È quindi possibile passare uno Calendar in cui sono contenute informazioni sul fuso orario corrente, in modo che il driver JDBC possa regolare la data/ora UTC con il timestamp conforme al fuso orario. Se è ad esempio GMT + 1, il driver JDBC aggiungerà un'ora al timestamp prima di tornare.

+0

Buona risposta. Per maggiori informazioni sulle variazioni delle varie classi Date in JDBC puoi fare riferimento al mio post qui: http://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date/2306051# 2306051 – Esko