2010-07-16 67 views
26

Tôi mất độ chính xác trong các cuộc gọi ResultSet.getDate (x) của mình. Về cơ bản:JDBC ResultSet getDate mất độ chính xác

rs = ps.executeQuery(); 
rs.getDate("MODIFIED"); 

là ngày trở về cắt ngắn đến ngày MODIFIED là trường Oracle TIMESTAMP có độ chính xác mặc định. Tôi nghĩ rằng có thể có một số tinh chỉnh JDBC tôi đang thiếu; thường TIMESTAMP tương thích với DATE, nhưng tôi hy vọng tôi không phải xác định lại toàn bộ bảng.

Trả lời

62

ResultSet.getDate() trả về một java.sql.Date, không phải là java.util.Date. Nó được định nghĩa là một ngày vượt thời gian. Nếu bạn muốn có dấu thời gian, hãy sử dụng ResultSet.getTimestamp()!

+4

Lưu ý tự rtfm. Tôi nghĩ rằng điều này đã làm việc ở những nơi khác. – orbfish

+1

"java.sql.Date được định nghĩa là một ngày vượt thời gian". Tuyên bố đó đã cứu mạng tôi. Cảm ơn bạn! – Tiago

4

Bạn nên sử dụng java.sql.Timestamp thay vì java.sql.Date. Bạn có thể sử dụng nó như là một đối tượng java.util.Date sau đó nếu cần thiết.

rs = ps.executeQuery(); 
Timestamp timestamp = rs.getTimestamp("MODIFIED"); 

Hy vọng điều này sẽ hữu ích.

+2

Xây dựng 'Ngày mới' là không cần thiết vì' Dấu thời gian kéo dài ngày '. – BalusC

0

Sử dụng Timestap là cách chính xác. Xin lưu ý rằng với Dấu thời gian, bạn sẽ không thể đặt các cột thành rỗng nếu bạn sử dụng Liquibase.

Một vấn đề mà tôi cũng gặp phải.

Các vấn đề liên quan