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

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

  • 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> <b> <img>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato