Momentos con java.sql.Date y java.util.Date

Etiquetado:  •    •    •  

El acceso a la base de datos con el paquete java.sql me ha traido un poco roto, no sé si por detalles de la implementación de java.sql o por la de implementación del driver JDBC de MySQL, pero el caso concreto que quiero explicar por si a alguien le sucede lo mismo y Santo Google lo trae aquí, consistía en fijar el valor de un campo DateTime de MySQL en una sentencia de inserción con un parámetro SQL.

Ya que las clases java.util.Date y java.sql.Date soportan horas, minutos y segundos, lo lógico es que se use sobre la interfaz java.sql.PreparedStament el método setDate(int parameterIndex, Date momento) y listo. Pues no lo sigan intentado, porque por mucho que insistan, en la base de datos siempre se fijará el momento con el día pero sin más precisión que el día del mes: las horas, minutos y segundos quedan a cero.

Después de varios intentos de depuración, la conclusión fue que el método PreparedStament.setDate() no vale para un campo MySQL DateTime. ¿Cuáles más hay? Uhmmm, setTimestamp(), pero este se supone que es para los campos MySQL TimeStamp... ¡Pues no! La sorpresa fue que funcionó con setTimestamp, convirtiendo desde java.util.Date a java.sql.Timestamp:

java.util.Date momentoDate = new java.util.Date();
java.sql.Timestamp momentoTimestamp = new java.sql.Timestamp(momentoDate.getTime());
java.sql.PreparedStatement st = conexion.prepareStatement("INSERT INTO log (momento) VALUES (?)");
st.setTimestamp(1, momentoTimestamp);
st.executeUpdate();

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

He llegado aquí a través de "Santo Google" y tu explicación me ha venido perfecta para una aplicación que estoy haciendo como práctica de la universidad.

Muchas gracias!!!!

Lo mismo digo, muchas gracias, me ha servido de gran ayuda

GRACIAS!!
vale, men tenia el mismo problema se agradece

excelente! Justo la solucion que andaba buscando. No podia entender pq no me guardaba la hora en la BD

Gracias!

Muchisimas gracias colega!!!!!

Me acabas de dar la solución a mi problema.
Repito, gracias.

Gracias este articulo es de mucha ayuda

Enviar un comentario nuevo

  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato