2011-08-10 35 views
6

la base de datos mi columna es de tipo TIMESTAMP, por lo que mi clase tiene propiedades de tipo de fecha y hora como esto:conseguir DateTime del conjunto de resultados en JdbcTemplate

public void setDiscoveryDate(final DateTime discoveryDtTm) { 
     this.discoveryDtTm = discoveryDtTm; 
    } 

ahora en JdbcTemplate Quiero conseguirlo, por lo que algunos código como este :

variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm")); 

que no funciona porque la columna de resultados para conseguir que no podía encontrar algo que devuelve DateTime, solo vi bien getDate o getTime.

Respuesta

13

Eso es porque DateTime no es un tipo estándar de Java. Si se refiere al tipo JodaTime, a continuación, intente esto:

variant.setDiscoveryDate(
    new DateTime(rs.getTimestamp("discovery_dt_tm").getTime()) 
); 

Esto romperá si rs.getTimestamp vuelve null, por lo que es posible que desee romper este en sentencias más pequeños y añadir cheques por null.

Tenga en cuenta que esto puede ser más fácil, ya que DateTime 's constructor toma un java.util.Date, que Timestamp es una subclase de:

variant.setDiscoveryDate(
    new DateTime(rs.getTimestamp("discovery_dt_tm")) 
); 

Pero también es incorrecto, debido al mal diseño de la clase Timestamp (véase javadoc para una explicación).

Seguir con el primer ejemplo (con getTime())

+0

gracias, así que todavía estamos obteniendo solo el empate con .getTime() y pasándolo al nuevo DateTime, entonces ¿qué pasa con Date? – Bohn

+1

@BDotA: 'Timestamp.getTime()' tiene un nombre incorrecto: devuelve los milisegundos desde el 1 de enero de 1970, por lo que incluye partes de fecha y hora. – skaffman

+0

rs.getTimestamp() devolverá el valor bruto de la base de datos, pero * en la zona horaria de la JVM *. Si almacena valores UTC en la base de datos, el nuevo DateTime (rs.getTimestamp()) devolverá valores incorrectos, compensados ​​por lo que sea el desplazamiento UTC. –

1

intento con:

variant.setDiscoveryDate(new DateTime(rs.getTimestamp("discovery_dt_tm").getTime())); 
+0

gracias, por qué "getMillis()"? – Bohn

Cuestiones relacionadas