2013-06-22 8 views
5

Ich verwende Spring JDBCTemplate, um DB zu verbinden. Wenn ich die Auswahl Datum in DB unter Abfrage mitDatum auswählen Abfrage mit Zeitformat funktioniert nicht mit JDBCTemplate und util.Date

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

ausgegeben wird, 31-12-99 23.59.59.

Aber, wenn ich das gleiche mit JDBCTemplate bin mit wie unten,

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

OUTPT ist 2099.12.31 00: 00: 00.0.

Die Zeit ist nicht korrekt. Ich brauche auch die gleiche Zeit in der Date-Klasse. Wie bekomme ich das?

Antwort

0

Vielen Dank für Ihre Antwort. Ich habe einen Weg gefunden, mir die Zeit zu nehmen.

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

Dieser Code ist in Ordnung seit der Spalte valid_to table index_composition scheint kein Datum zu sein, das der Verwendung der to_date-Funktion in Ihrem ursprünglichen Paket entspricht. Für eine Datumsspalte würde ich wirklich die Verwendung der Klasse java.sql.Timestamp in Erwägung ziehen – user327961

+2

Die Verwendung von 'java.sql.Timestamp' ist viel besser als' to_char' Konvertierung, die auf einer bestimmten RDBMS-Anbieter-Implementierung beruht. – flob

1

Sie müssen java.sql.Date importieren. Verwenden Sie stattdessen java.util.Date oder java.util.Timestamp.

java.sql.Date wird die Zeit abgeschnitten.

+0

Ich benutze nicht sql.Date .. Es ist util.Date nur .. – Samurai

+0

Versuchen Sie mit java.util.Timestamp, sollte es funktionieren. – Lokesh

+0

Soweit ich weiß '' queryForObject' funktioniert nicht mit 'java.util.Date' –

6

Sie müssen java.sql.Timestamp verwenden. java.sql.Date hat keine Zeitkomponente, daher ist die Zeit immer 00:00:00.

+0

Angenommen, dass ist' java.sql.Date' Sie verwenden nicht 'java.util.Date' –

4

java.sql.Date nicht behalten die Stunden, Minuten, Sekunden und Millisekunden, da sie den Datumstyp in SQL spiegelt. Fragen Sie einfach nach einem java.sql.Timestamp anstelle eines Datums. Da Timestamp ein Untertyp von java.util.Date ist, können Sie direkt danach fragen.

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

Können Sie Ihrer Antwort eine Erklärung geben? – Schorsch

0

Java 8 ermöglicht uns, eine besser geeignete Date-Klassen zu verwenden (in java.time. *). Die convertion von LOCALDATE (Java) zu SQL-Datum wird durch getan:

Diese Klassen hatten mehrere Nachteile, einschließlich: java.sql.Date.valueOf(LocalDate.of(2012, Month.DECEMBER, 12))

advise

Oracle Java 8 Termine statt die älteste Version zu verwenden

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. 
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.