2013-06-22 10 views
5

Używam Spring JDBCTemplate do Conneect DB. Kiedy jestem datę wybierając w DB używając poniższego zapytaniaWybierz zapytanie data z formatem czasu nie działa z JDBCTemplate i util.Date

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

wyjście, 31-12-99 23:59:59.

Ale gdy używam samo z JDBCTemplate jak poniżej,

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

rezultatu to jest 31.12.2099 00: 00: 00.0.

Czas jest nieprawidłowy. Potrzebuję również tego samego czasu w klasie Date. Jak to zdobyć?

Odpowiedz

0

Dzięki za wszystkie odpowiedzi. Znalazłem sposób, by poświęcić trochę czasu.

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

Ten kod jest w porządku, ponieważ kolumna valid_to tabela index_composition nie wydaje się być datą zgodnie z użyciem funkcji to_date w oryginalnym guery. Dla kolumny z datą naprawdę rozważałbym użycie klasy java.sql.Timestamp – user327961

+2

Użycie 'java.sql.Timestamp' jest znacznie lepsze niż konwersja' to_char', która opiera się na konkretnej implementacji dostawców RDBMS. – flob

1

Musisz importować java.sql.Date. Zamiast tego użyj java.util.Date lub java.util.Timestamp.

java.sql.Date skróci czas.

+0

Nie używam sql.Date .. Jest to util.Date only .. – Samurai

+0

Spróbuj z java.util.Timestamp, powinno działać. – Lokesh

+0

Z tego co wiem 'queryForObject' nie działa z' java.util.Date' –

6

Należy użyć java.sql.Timestamp. java.sql.Date nie ma komponentu czasu, więc jego czas jest zawsze 00:00:00.

+0

Zakładając, że jest to 'java.sql.Date', używają one nie' java.util.Date' –

4

java.sql.Date nie zachowują godziny, minuty, sekundy i milisekundy, ponieważ odzwierciedla format daty w SQL. Po prostu zapytaj o java.sql.Timestamp zamiast Date. Ponieważ Timestamp jest podtypem java.util.Date, możesz go zapytać bezpośrednio.

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

Czy możesz podać jakieś wyjaśnienie swojej odpowiedzi? – Schorsch

0

Java 8 pozwala nam używać lepiej dopasowanych klas Date (w java.time. *). konwersja z LOCALDATE (Java) aktualne sql odbywa się poprzez: java.sql.Date.valueOf(LocalDate.of(2012, Month.DECEMBER, 12))

Oracle radzą, aby korzystać java 8 Termin zamiast najstarszą wersję:

Zajęcia te miały kilka wad, w tym:

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.