sql >> Base de Datos >  >> RDS >> Oracle

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

Primero, estás confundiendo java.util con java.sql . Al usar PreparedStatement#setDate() y ResultSet#getDate() , necesita java.sql.Date . Análogamente, al usar PreparedStatement#setTimestamp() y ResultSet#getTimestamp() necesita java.sql.Timestamp .

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

En cuanto a las zonas horarias, lo 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, para 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, entonces el controlador JDBC agregará una hora a la marca de tiempo antes de regresar.