Samurai
Samurai

Reputation: 843

Select date query with time format is not working with JDBCTemplate and util.Date

I am using Spring JDBCTemplate to conneect DB. When I am selecting date in DB using below query

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

output is, 31-12-99 23:59:59.

But, when I am using the same with JDBCTemplate like below,

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

outpt is 2099-12-31 00:00:00.0.

Time is not correct. I also need the same time in Date class. How to get that?

Upvotes: 6

Views: 33535

Answers (5)

slonepi
slonepi

Reputation: 176

Java 8 allows us to use a better suited Date classes (in java.time.*). The convertion from LocalDate (java) to sql date is done by: java.sql.Date.valueOf(LocalDate.of(2012, Month.DECEMBER, 12))

Oracle advise to use java 8 Dates instead of the oldest version :

These classes had several drawbacks, including:

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.

Upvotes: 0

user327961
user327961

Reputation: 2490

java.sql.Date don't retain the hours, minutes, seconds and milliseconds since it mirrors the date type in SQL. Simply ask for a java.sql.Timestamp instead of a Date. Since Timestamp is a subtype of java.util.Date, you can ask it directly.

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);

Upvotes: 5

Samurai
Samurai

Reputation: 843

Thanks for all your response. I found a way to take the time.

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

Upvotes: 0

Mark Rotteveel
Mark Rotteveel

Reputation: 108999

You need to use java.sql.Timestamp. java.sql.Date does not have a time component, so its time is always 00:00:00.

Upvotes: 8

Lokesh
Lokesh

Reputation: 7940

You must be importing java.sql.Date. Instead use java.util.Date or java.util.Timestamp.

java.sql.Date will truncate time.

Upvotes: 1

Related Questions