2010-07-16 1 views
26

ResultSet.getDate (x) 호출에서 정밀도가 떨어지고 있습니다. 기본적으로 :JDBC ResultSet getDate 정밀도가 손실 됨

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

기본 정밀도 오라클 타임 스탬프 필드가 수정 된 날을 잘립니다 날짜를 반환합니다. JDBC가 일부 수정되지 않을 수도 있습니다. 일반적으로 TIMESTAMP는 DATE와 호환되지만 전체 테이블을 재정의 할 필요가 없기를 바랍니다.

답변

62

ResultSet.getDate()java.util.Date이 아니라 java.sql.Date을 반환합니다. 그것은 영원한 날짜로 정의됩니다. 타임 스탬프를 사용하려면 ResultSet.getTimestamp()!

+4

자기 소개 - rtfm. 나는 이것이 다른 곳에서 일하고 있다고 생각했다. – orbfish

+1

"java.sql.Date는 시간을 초월한 날짜로 정의되었습니다." 이 성명서는 제 목숨을 구했습니다. 고맙습니다! – Tiago

4

java.sql.Date 대신 java.sql.Timestamp를 사용해야합니다. 필요한 경우 나중에 java.util.Date 객체로 사용할 수 있습니다.

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

희망이 있습니다.

+2

'Timestamp extends Date' 이후로'new Date'를 생성하는 것은 불필요합니다. – BalusC

0

Timestap을 사용하는 것이 올바른 방법입니다. Timestamp를 사용하지 않으면 Liquibase를 사용할 경우 열을 nullable로 설정할 수 없습니다.

문제가 발생했습니다.