Pregunta sobre java.sql.Date y PreparedStatement

1,478 views
Skip to first unread message

Jaime Galindo

unread,
Sep 17, 2007, 11:54:59 AM9/17/07
to jav...@googlegroups.com

Tengo una base de datos Oracle 10g y quiero saber si se puede lo siguiente desde java.

 

Estoy usando un PreparedStatement para setear la fecha del sistema en un campo Date de una tabla.

 

Utilizo lo siguiente:

 

    java.sql.Date fechaSys = new java.sql.Date(System.currentTimeMillis());

 

luego el :

 

ps.setDate(1, fechaSys)

 

Pero en la tabla me lo deja de la siguiente forma:

2007-08-23 00:00:00

 

La pregunta dice es: Se puede con PreparedStatement hacer que me grabe en el campo tipo Date (2007-08-23 10:31:15) la fecha y la hora?

 

Ojo: Sin tener que utilizar un tipo de campo TimeStamp.

 

Gracias por los comentarios.

 

Pablo Saavedra

unread,
Sep 17, 2007, 1:23:12 PM9/17/07
to jav...@googlegroups.com
Hola,

esto lo saqué del javadoc de java.sql.Date:

To conform with the definition of SQL <code>DATE</code>, the
 * millisecond values wrapped by a <code>java.sql.Date</code> instance
 * must be 'normalized' by setting the
 * hours, minutes, seconds, and milliseconds to zero in the particular
 * time zone with which the instance is associated.

Podrías usar la clase java.sql.Timestamp, pero para que con java.sql.Date no vas a poder.

Saludos,
Pablo.
 

Octavio Nuñez

unread,
Sep 17, 2007, 2:07:35 PM9/17/07
to jav...@googlegroups.com
estimado jaime, te sugier que lo conviertas a un string y que caiga los datos al campo que necesitas, eso me paso con una aplicacion que hice en jsp y lo resolvi de esa forma ;-).... saludos

El día 17/09/07, Jaime Galindo <jgal...@mh.gob.sv> escribió:
Desarrollador de Software, Soporte Técnico y Seguridad Informática
JSP, Java, PHP, Jscript, Apache & Tomcat Server, MySQL Server, HTML, C++
enriqu...@hotmail.com - enriqu...@yahoo.com - enriqu...@gmail.com
251-6104 - 211-0441 - 6621-5790 -ICQ  157-246-843

Jaime Galindo

unread,
Sep 17, 2007, 3:54:14 PM9/17/07
to jav...@googlegroups.com

Octavio, no entiendo que quieres decir con “caiga los datos al campo que necesitas”.

 

No se si te refieres a que en el PreparedStatement utilice el metodo ps.setString(……). Quiero que comprendas que el campo en la base de datos es tipo Date y lo que quiero es grabarle a ese campo la fecha y la hora.

 

Tampoco deseo convertir ese campo a tipo String en la base de datos porque necesito en querys hacer operaciones con fechas. Pero gracias por la ayuda de ustedes.

 

 


jhon elvis

unread,
Sep 18, 2007, 11:07:29 AM9/18/07
to jav...@googlegroups.com
si tu tipo de dato es Date en la base de datos, no creo que reconozca la hora, para eso existe el tipo de dato timestamp, al usar el preparedstatement este verifica el tipo de dato que soporta tu tabla y hace cast al valor que le estas pasando, como dice el anterior mensaje podrias realizar la operacion sin usar el prepared y colocar los datos concatenando y grabar.

Jhon Elvis


From: jgal...@mh.gob.sv
To: jav...@googlegroups.com
Subject: [JavaSOS] Re: Pregunta sobre java.sql.Date y PreparedStatement
Date: Mon, 17 Sep 2007 13:54:14 -0600

Octavio, no entiendo que quieres decir con "caiga los datos al campo que necesitas".

 

No se si te refieres a que en el PreparedStatement utilice el metodo ps.setString(......). Quiero que comprendas que el campo en la base de datos es tipo Date y lo que quiero es grabarle a ese campo la fecha y la hora.





Prueba algunos de los nuevos servicios en línea que te ofrece Windows Live Ideas: tan nuevos que ni siquiera se han publicado oficialmente todavía. Pruébalo

Jaime Galindo

unread,
Sep 18, 2007, 1:21:37 PM9/18/07
to jav...@googlegroups.com

Jhon Elvis, si no uso el prepared, entonces lo hago con el Statement y concateno los datos?

 

 


Pablo Molnar

unread,
Sep 18, 2007, 1:30:42 PM9/18/07
to jav...@googlegroups.com
En realidad en Oracle:

DATE --> Fecha y Hora granularidad segundos
TIMESTAMP --> Fecha y Hora granularidad fracciones de segundos

Link

Slds.
Pablo Molnar

El día 18/09/07, jhon elvis <je...@hotmail.com> escribió:

jhon elvis

unread,
Sep 19, 2007, 1:41:52 PM9/19/07
to jav...@googlegroups.com

revisando la informacion tiene razon pablo, tal vez puedas utilizar la clase SimpleDateFormat para dar formato a tu dato y usar el preparedStatementJhon ElvisDate: Tue, 18 Sep 2007 14:30:42 -0300From: pablo...@gmail.comTo: jav...@googlegroups.comSubject: [JavaSOS] Re: Pregunta sobre java.sql.Date y PreparedStatementEn realidad en Oracle:DATE --> Fecha y Hora granularidad segundosTIMESTAMP --> Fecha y Hora granularidad fracciones de segundos
LinkSlds.Pablo MolnarEl día 18/09/07, jhon elvis <je...@hotmail.com> escribió:

si tu tipo de dato es Date en la base de datos, no creo que reconozca la hora, para eso existe el tipo de dato timestamp, al usar el preparedstatement este verifica el tipo de dato que soporta tu tabla y hace cast al valor que le estas pasando, como dice el anterior mensaje podrias realizar la operacion sin usar el prepared y colocar los datos concatenando y grabar.

Jhon ElvisFrom: jgal...@mh.gob.svTo:
jav...@googlegroups.comSubject: [JavaSOS] Re: Pregunta sobre java.sql.Date y PreparedStatementDate: Mon, 17 Sep 2007 13:54:14 -0600


Octavio, no entiendo que quieres decir
con "caiga los datos al campo que necesitas".

No se si te refieres a que en el
PreparedStatement utilice el metodo ps.setString(......). Quiero que
comprendas que el campo en la base de datos es tipo Date y lo que quiero es
grabarle a ese campo la fecha y la hora.

Tampoco deseo convertir ese campo a tipo
String en la base de datos porque necesito en querys hacer operaciones con
fechas. Pero gracias por la ayuda de ustedes.

De:

Utilizo
lo siguiente:

luego el :

ps.setDate(1, fechaSys)

2007-08-23
00:00:00

Gracias
por los comentarios.

Prueba algunos de los nuevos servicios en línea que te ofrece Windows Live Ideas: tan nuevos que ni siquiera se han publicado oficialmente todavía.
Pruébalo

_________________________________________________________________
Consigue el nuevo Windows Live Messenger
http://get.live.com/messenger/overview

Jaime Galindo

unread,
Sep 19, 2007, 4:56:00 PM9/19/07
to jav...@googlegroups.com
Ya probe esto del SimpleDateFormat y no me funciono con el
preparedStatement.

Supongo que no funciona porque el preparedStatement espera como argumento un
objeto java.sql.Date y este siempre veo que lo pone como yyyy-mm-dd.

Gracias por los aportes.


-----Mensaje original-----

jhon elvis
Enviado el: miércoles, 19 de septiembre de 2007 11:42

Israel Luna

unread,
Sep 19, 2007, 6:01:44 PM9/19/07
to jav...@googlegroups.com
La manera más facil de hacerlo, es darle formato de oracle, me imagino que tu ya tienes las horas y minutos, sino, pues lee mas de java, conlo que te dicen del SimpleDateFormat, o GregorianCalendar, pero ya que las tengas, solo haces algo asi:
to_date('19/09/2007 12:30', 'dd/mm/yyyy HH24:MI') ,
con eso ya forzas el formato, para que te lo almacene la base de datos.
Saludos.

----- Mensaje original ----
De: jhon elvis <je...@hotmail.com>
Para: jav...@googlegroups.com
Enviado: miércoles, 19 de septiembre, 2007 12:41:52


¡Sé un mejor fotógrafo!
Perfecciona tu técnica y encuentra las mejores fotos en:
http://mx.yahoo.com/promos/mejorambientalista.html

Jaime Galindo

unread,
Sep 20, 2007, 9:41:27 AM9/20/07
to jav...@googlegroups.com

Israel me parece fabulosa tu idea. Solo tengo una pregunta, como le haces para usar to_date(('19/09/2007 12:30', 'dd/mm/yyyy HH24:MI') en un preparedStatement.

 

Recuerda que en preparedStatement se espera en el metodo setDate un objeto java.sql.Date.

 

Yo creo que me han entendido mal la pregunta. Se puede hacer de muchas maneras pero con statement y yo lo quiero hacer con preparedStatement.

 

Pero gracias por los comentarios, si estoy errado por favor corregirme.


Pablo Saavedra

unread,
Sep 20, 2007, 1:25:26 PM9/20/07
to jav...@googlegroups.com
Entonces en vez de usar un java.sql.Date que no lleva el valor de hora, minuto y segundos a 0, usa un java.sql.Timestamp. Debería funcionar lo mismo pero agregándote la marca de tiempo también.

Saludos.

Israel Luna

unread,
Sep 20, 2007, 2:55:47 PM9/20/07
to jav...@googlegroups.com
Hola de nuevo, mira compañero te complicas si utilizas el prepared statement agregandole los parámetos por tipo, puedes armar una cadena como la que te pongo de ejemplo y de igual manera jala, así te evitas usar esos setInt, setBigDecimal, etc, por que vas a lidiar mucho con las conversiones, yo armo las cadenas de manera similar para invocar stored procedures, por lo que te garantizo que si jala.
Saludos y suerte. 
 
String sql = "UPDATE PROYECTOS SET FECHAINICIAL=to_date('19/09/2007 12:30', 'dd/mm/yyyy HH24:MI')   WHERE ID=1";
    PreparedStatement pstm = conn.prepareStatement(sql);
    pstm.execute();
    pstm.close();

Pd: De hecho este pedazo de código lo probe en mi aplicación antes de echarte choro.
----- Mensaje original ----
De: Jaime Galindo <jgal...@mh.gob.sv>
Para: jav...@googlegroups.com
Enviado: jueves, 20 de septiembre, 2007 8:41:27

Asunto: [JavaSOS] Re: Pregunta sobre java.sql.Date y PreparedStatement

Israel me parece fabulosa tu idea. Solo tengo una pregunta, como le haces para usar to_date(('19/09/2007 12:30', 'dd/mm/yyyy HH24:MI') en un preparedStatement.

 

Recuerda que en preparedStatement se espera en el metodo setDate un objeto java.sql.Date.

 

Yo creo que me han entendido mal la pregunta. Se puede hacer de muchas maneras pero con statement y yo lo quiero hacer con preparedStatement.

 

Pero gracias por los comentarios, si estoy errado por favor corregirme.


De: jav...@googlegroups.com [mailto: jav...@googlegroups.com ] En nombre de Israel Luna
Enviado el: miércoles, 19 de septiembre de 2007 16:02
Para: jav...@googlegroups.com
Asunto: [JavaSOS] Re: Pregunta sobre java.sql.Date y PreparedStatement

 

La manera más facil de hacerlo, es darle formato de oracle, me imagino que tu ya tienes las horas y minutos, sino, pues lee mas de java, conlo que te dicen del SimpleDateFormat, o GregorianCalendar, pero ya que las tengas, solo haces algo asi:

to_date('19/09/2007 12:30', 'dd/mm/yyyy HH24:MI') ,

con eso ya forzas el formato, para que te lo almacene la base de datos.

Saludos.

----- Mensaje original ----
De: jhon elvis <je...@hotmail.com>
Para: jav...@googlegroups.com
Enviado: miércoles, 19 de septiembre, 2007 12:41:52
Asunto: [JavaSOS] Re: Pregunta sobre java.sql.Date y PreparedStatement

revisando la informacion tiene razon pablo, tal vez puedas utilizar la clase SimpleDateFormat para dar formato a tu dato y usar el preparedStatementJhon ElvisDate: Tue, 18 Sep 2007 14:30:42 -0300From: pablo...@gmail.comTo: jav...@googlegroups.com Subject: [JavaSOS] Re: Pregunta sobre java.sql.Date y PreparedStatementEn realidad en Oracle:DATE --> Fecha y Hora granularidad segundosTIMESTAMP --> Fecha y Hora granularidad fracciones de segundos


LinkSlds.Pablo MolnarEl día 18/09/07, jhon elvis <je...@hotmail.com> escribió:





si tu tipo de dato es Date en la base de datos, no creo que reconozca la hora, para eso existe el tipo de dato timestamp, al usar el preparedstatement este verifica el tipo de dato que soporta tu tabla y hace cast al valor que le estas pasando, como dice el anterior mensaje podrias realizar la operacion sin usar el prepared y colocar los datos concatenando y grabar.
Jhon ElvisFrom: jgal...@mh.gob.svTo:

jav...@googlegroups.com Subject: [JavaSOS] Re: Pregunta sobre java.sql.Date y PreparedStatementDate: Mon, 17 Sep 2007 13:54:14 -0600






¡Sé un mejor asador!
Aprende todo sobre asados en:
http://mx.yahoo.com/promos/mejorasador.html

jhon elvis

unread,
Sep 21, 2007, 7:02:29 PM9/21/07
to jav...@googlegroups.com
deberias leer la documentacion  un poco mas

SimpleDateFormat is a concrete class for formatting and parsing dates in a locale-sensitive manner. It allows for formatting (date -> text), parsing (text -> date), and normalization.

http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

El día 20/09/07, Israel Luna <darkso...@yahoo.com.mx> escribió:

Jaime Galindo

unread,
Sep 24, 2007, 11:30:30 AM9/24/07
to jav...@googlegroups.com

Ya resolvi el problema con java.sql.TimeStamp.    Gracias por toda la ayuda.

 

Fonchi

unread,
Oct 9, 2007, 10:11:31 AM10/9/07
to JavaSOS

Creo que todos se estan rayando demasiadisimo....

Manda en tu cadena un SYSDATE y el oracle hara los suyo

Reply all
Reply to author
Forward
0 new messages