bestsource

Oracle jdbc에서 문 준비 및 타임스탬프 설정

bestsource 2023. 7. 3. 23:00
반응형

Oracle jdbc에서 문 준비 및 타임스탬프 설정

Prepared Statement with Timestamp(타임스탬프 포함)를 사용하고 있습니다. 여기서 절:

PreparedStatement s=c.prepareStatement("select value,utctimestamp from t where utctimestamp>=? and utctimestamp<?"); 
s.setTimestamp(1, new Timestamp(1273017600000L));   //2010-05-05 00:00 GMT
s.setTimestamp(2, new Timestamp(1273104000000L));   //2010-05-06 00:00 GMT
ResultSet rs = s.executeQuery();
if(rs.next()) System.out.println(rs.getInt("value"));

클라이언트 컴퓨터의 표준 시간대가 다를 경우 결과가 다릅니다.이것은 Oracle jdbc의 버그입니까?아니면 올바른 행동?

Oracle 데이터베이스 버전은 10.2이며 Oracle jdbc Thin driver 버전 10.2 및 11.1을 사용해 보았습니다.

매개 변수는 타임스탬프이며, 도중에 시간 변환이 수행되지 않을 것으로 예상했습니다.데이터베이스 열 유형은 DATE이지만, 결과가 동일한 TIMESTAMP 열 유형으로도 확인했습니다.

올바른 결과를 얻을 수 있는 방법이 있습니까?전체 애플리케이션의 기본 표준 시간대를 UTC로 변경할 수 없습니다.

도와주셔서 고마워요.

UTC 표준 시간대에서 준비된 문에 타임스탬프 값을 설정하려면 다음과 같이 하십시오.

stmt.setTimestamp(1, t, Calendar.getInstance(TimeZone.getTimeZone("UTC")))

타임스탬프 값은 항상 UTC이지만 jdbc 드라이버가 자동으로 타임스탬프 값을 서버로 올바르게 전송할 수 있는 것은 아닙니다.세 번째인 일정관리 매개변수는 드라이버가 서버에 대한 값을 올바르게 준비하는 데 도움이 됩니다.

언급URL : https://stackoverflow.com/questions/2858182/preparedstatement-and-settimestamp-in-oracle-jdbc

반응형