2013-06-22 9 views
5

Sto usando Spring JDBCTemplate per connettere DB. Quando sto selezionando la data nel DB usando sotto interrogazioneSelezionare la query di data con il formato dell'ora non funziona con JDBCTemplate e util.Date

select to_date(valid_to,'DD-MM-YYYY HH24:MI:SS') from composition

uscita è, 31-12-99 23:59:59.

Ma, quando io sto usando lo stesso con JDBCTemplate come qui di seguito,

Date d = jdbcTemplate.queryForObject("select to_date(valid_to,'DD-MM-YY HH24:MI:SS') from composition",Date.class); 

Outpt è 2099/12/31 00: 00: 00.0.

Il tempo non è corretto. Ho anche bisogno della stessa ora nella classe Date. Come ottenerlo?

risposta

0

Grazie per la vostra risposta. Ho trovato un modo per prendermi del tempo.

String dateString = jdbcTemplate.queryForObject("select to_char(valis_to, 'DD-MM-YYYY HH24:MI:SS') from composition",String.class); 
Date date = sdf.parse(dateString); 
+0

Questo codice va bene poiché la colonna valid_to table index_composition non sembra essere una data in base all'utilizzo della funzione to_date nella tua guery originale. Per una colonna di date considererei seriamente l'utilizzo della classe java.sql.Timestamp – user327961

+2

L'uso di 'java.sql.Timestamp' è molto meglio della conversione' to_char' che si basa su un'implementazione di fornitori RDBMS specifici. – flob

1

È necessario importare java.sql.Date. Utilizzare invece java.util.Date o java.util.Timestamp.

java.sql.Date troncherà il tempo.

+0

Non sto utilizzando sql.Date .. È util.Date solo .. – Samurai

+0

Provare con java.util.Timestamp, dovrebbe funzionare. – Lokesh

+0

Per quanto ne so 'queryForObject' non funziona con' java.util.Date' –

6

È necessario utilizzare java.sql.Timestamp. java.sql.Date non ha un componente orario, quindi il suo orario è sempre 00:00:00.

+0

Supponendo che sia 'java.sql.Date' non usano' java.util.Date' –

4

java.sql.Date non conservano ore, minuti, secondi e millisecondi poiché rispecchia il tipo di data in SQL. Basta chiedere un java.sql.Timestamp invece di una data. Poiché Timestamp è un sottotipo di java.util.Date, puoi chiederlo direttamente.

import java.util.Date; 
import java.sql.Timestamp; 

[...] 

Date d = jdbcTemplate.queryForObject("select to_date(valid_to,'DD-MM-YY HH24:MI:SS') from index_composition", Timestamp.class); 
+1

Puoi fornire qualche spiegazione alla tua risposta? – Schorsch

0

Java 8 ci consente di utilizzare classi Date più adatte (in java.time. *). La conversione dal LocalDate (java) ad oggi SQL è fatto da: java.sql.Date.valueOf(LocalDate.of(2012, Month.DECEMBER, 12))

Oracle consigliano di utilizzare java 8 Date anziché la versione più vecchia:

Queste classi hanno diversi inconvenienti, tra cui:

The Calendar class was not type safe. 
Because the classes were mutable, they could not be used in multithreaded applications. 
Bugs in application code were common due to the unusual numbering of months and the lack of type safety. 
Problemi correlati