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();
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