2013-06-22 33 views
5

Tôi đang sử dụng Spring JDBCTemplate cho conneect DB. Khi tôi chọn ngày trong DB sử dụng dưới đây truy vấnChọn truy vấn ngày có định dạng thời gian không hoạt động với JDBCTemplate và util.Date

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

ra là, 31-12-99 23:59:59.

Tuy nhiên, khi tôi đang sử dụng cùng với JdbcTemplate như dưới đây,

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

outpt là 2099/12/31 00: 00: 00.0.

Thời gian không chính xác. Tôi cũng cần cùng một thời gian trong lớp Date. Làm thế nào để có được điều đó?

Trả lời

0

Cảm ơn mọi phản hồi của bạn. Tôi đã tìm ra cách để dành thời gian.

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

Mã này là tốt vì cột valid_to table index_composition dường như không phải là ngày theo việc sử dụng hàm to_date trong guery ban đầu của bạn. Đối với cột ngày tháng, tôi thực sự xem xét việc sử dụng lớp java.sql.Timestamp – user327961

+2

Sử dụng 'java.sql.Timestamp' là cách tốt hơn so với chuyển đổi' to_char' dựa trên việc triển khai các nhà cung cấp RDBMS cụ thể. – flob

1

Bạn phải nhập java.sql.Date. Thay vào đó, hãy sử dụng java.util.Date hoặc java.util.Timestamp.

java.sql.Date sẽ cắt ngắn thời gian.

+0

Tôi không sử dụng sql.Date .. Nó là util.Date chỉ .. – Samurai

+0

Hãy thử với java.util.Timestamp, nó sẽ hoạt động. – Lokesh

+0

Theo tôi biết 'queryForObject' không hoạt động với' java.util.Date' –

6

Bạn cần sử dụng java.sql.Timestamp. java.sql.Date không có thành phần thời gian, do đó, thời gian của nó luôn là 00:00:00.

+0

Giả sử đó là 'java.sql.Date' mà chúng đang sử dụng không phải là' java.util.Date' –

4

java.sql.Date không giữ giờ, phút, giây và mili giây vì nó phản ánh loại ngày trong SQL. Đơn giản chỉ cần yêu cầu một java.sql.Timestamp thay vì một ngày. Vì Dấu thời gian là một loại phụ của java.util.Date, bạn có thể yêu cầu trực tiếp.

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

Bạn có thể cung cấp một số giải thích cho câu trả lời của mình không? – Schorsch

0

Java 8 cho phép chúng tôi sử dụng lớp Ngày phù hợp hơn (trong java.time. *). Các chuyển đổi từ LOCALDATE (java) cho đến nay sql được thực hiện bởi: java.sql.Date.valueOf(LocalDate.of(2012, Month.DECEMBER, 12))

Oracle tư vấn để sử dụng java 8 Ngày thay vì phiên bản cổ xưa nhất:

Những lớp học có một số nhược điểm, bao gồm:

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.