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
Muchas Gracias! Fue la solución al problema.
Pues tengo el mismo problema... pero la solución propuesta no me funcionó; sigo sin poder almacenar la hora en el campo datetime.
Tengo la última versión de MySQL, la última versión del driver, probé en dos sistemas operativos diferentes ... y nada
Un alma piadosa que se compadezca y me dé una mano
GRACIAS
gracias por la explicacion pero quisiera saber:
funcionara al contrario me explico de un campo mysql Date mostrarlo en java
ya que lo he intentado con el metodo Date() de java y no me ha salido o será la respuesta
que he estado buscando...
te estaré agradecido por tu respuesta!
buenisimo buenisimo q facil llevaba un largo tiempo intentando hacerlo muchas gracias
Muchas gracias, he estado depurando y me extrañaba mucho que la hora la pusiera a 00:00, probaré el Timestamp. Santo Google :D
Saludos
Hola Yo estoy haciendo esto
Metodo que llama la hora y la envva a guardar
java.util.Date momentoDate = new java.util.Date();
java.sql.Timestamp momentoTimestamp = new java.sql.Timestamp(momentoDate.getTime());
sql.guardarPrueba(momentoDate);
Metodo para guardar
public void guardarPrueba(Timestamp sqlFecha) {
PreparedStatement insertDato = null;
System.out.println(sqlFecha);
try {
insertDato = conn.prepareStatement("INSERT INTO prueba VALUES(?)");
insertDato.setTimestamp(1, sqlFecha);
insertDato.execute();
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
me da el siguiente errorException in thread "AWT-EventQueue-0" java.lang.NullPointerException
Enviar un comentario nuevo