2010-04-06 24 views
9

java.util.Date, java.util.Timetamp parecen estar causando una gran confusión para muchos. Dentro de StackOverflow hay tantas preguntas, Desafortunadamente mi pregunta es poco retorcida.ResultSet.getTimestamp ("date") vs ResultSet.getTimestamp ("date", Calendar.getInstance (tz))

Hay 2 JDBC api. ¿Cómo deberían actuar? ¿Hubo alguna coherencia entre los RDBMS?

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

Si alguien tiene conocimientos en Sybase, ¿podría compartir su experiencia?

Respuesta

23

En primer lugar, confunde java.util con java.sql. Cuando usa PreparedStatement#setDate() y ResultSet#getDate(), necesita java.sql.Date. Análogamente, cuando usa PreparedStatement#setTimestamp() y ResultSet#getTimestamp() necesita java.sql.Timestamp.

En segundo lugar, es importante entender que java.sql.Date representa únicamente la fecha (año, mes, día) y nada menos o más. Esto se asignará a un tipo de campo SQL DATE. El java.sql.Timestamp representa el marca de tiempo (año, mes, día, hora, minuto, segundo, milisegundo), exactamente como lo hace java.util.Date y java.util.Calendar. Esto se asignará a un tipo de campo SQL TIMESTAMP o DATETIME.

En cuanto a las zonas horarias, las necesita cuando la base de datos no almacena información de zona horaria (por lo tanto, todas las marcas de tiempo se almacenan en UTC (GMT)). A continuación, puede pasar un Calendar en el que contiene información sobre la zona horaria actual, de modo que el controlador JDBC pueda ajustar la marca de tiempo UTC a la marca de tiempo que conforma la zona horaria. Si es, por ejemplo, GMT + 1, el controlador JDBC agregará una hora a la marca de tiempo antes de volver.

+0

Buena respuesta. Para obtener más información sobre las variaciones de las distintas clases de fecha en JDBC, puede consultar mi publicación aquí: http://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date/2306051# 2306051 – Esko