Jan 27

java.sql.Date y java.sql.Timestamp

En las bases de datos se pueden definir procedimientos y funciones a los que podemos llamar desde java. Si hay una función definida llamada una_funcion() que admite de parámetro un LONG y devuelve un VARCHAR, el código java puede ser como este

CallabelStatement st = conexion.prepareCall( “?=call una_funcion(?)”);
st.registerOutParameter(1,Types.VARCHAR ); // El tipo que sea el valor devuelto.
st.setLong(2,clave ); // El tipo que sea el parámetro.
st.execute( );
simbolo = st.getString( 1 );

Llevo haciendo esto en varias ocasiones. Y me he tropezado y dado de bruces con la diferencia  entre java.sql.Date y java.sql.Timestamp.

Resulta que tenemos definida  una función que admite una fecha/hora como parámetro. Es importante tanto la fecha como la hora para la correcta ejecución de la función.

Bien, puesto que en java la clase java.util.Date tiene ambas cosas, por similitud usaba para la llamada a la función la clase java.sql.Date de esta forma

java.util.Date unDate = …;
java.sql.Date fechaHora = new java.sql.Date(unDate);
CallabelStatement st = conexion.prepareCall( “?=call una_funcion(?)”);
st.registerOutParameter(1,Types.VARCHAR );
st.setDate(fechaHora);

Y no funcionaba.

Después de pelearnos un buen rato con el debugger y no sacar nada, al final un tonto System.out.println() para escribir qué valor estabamos pasando a la función nos dio la clave. java.sql.Date SÓLO tiene la fecha, se come la hora.

Pues vaya, si java.sql.Date no vale habrá que probar otra cosa. Probamos con

java.sql.Timestamp fechaHora = new java.sql.Timestamp (unDate);

st.setTimestamp (fechaHora);

y esto funcionó como la seda.

Mirando la API veo que hay java.sql.Date, java.sql.Time y java.sql.Timestamp. El primero es sólo fecha, se come la hora. El segundo supongo que es sólo hora y se come la fecha. El tercero es el bueno, el que tiene fecha y hora.

Son cosas de programar de oido y no leerse los manuales. Algún día aprenderé java.

Entradas relacionadas:

  • No hay entradas relacionadas.

6 Responses to “java.sql.Date y java.sql.Timestamp”

  1. rodrigo Says:

    Yo lo hago asi
    http://blog.riolambre.com/?p=43

  2. Andres Says:

    Son esos pequeños detalles los que a veces pueden convertirse en un verdadero dolor de cabeza por aquello de que las cosas simples a veces no son tan visibles a la vista!

    Muy bueno el diario!sencillo y ameno!

  3. Oscar Says:

    Hola amigos, tenía un lio con Date(), pues estaba usando 2 apis: util y sql, bueno pues me habeis ayudado mucho. Gracias

  4. Edwin Says:

    También andaba con problemas con fecha y hora, pues quería ambos. Gracias por la ayuda.

  5. Daniel Muñoz Says:

    Excelente! me pasaba lo mismo.

  6. Ricardo Says:

    Gracias por la información. Pude resolver un problema similar.

Leave a Reply