TIL
TIL copied to clipboard
ojdbc(oracle) 사용시 DB 타입 Date 값이 ZonedDateTime 변환되는 과정 분석
커스텀 핸들러 없는 경우
DB내에 필드타입은
DATE인 경우이다.
- com.oracle.ojdbc:ojdbc8:19.3.0.0
- org.mybatis:mybatis:3.5.3
- mybatis에서 제공하는
ZonedDateTimeHandler.getNullableResult(ResultSet, String)(org.apache.ibatis.type) -
OracleResultSet.getObject(String, Class)(oracle.jdbc.driver) -
InsensitiveScrollableResultSet.getObject(int, Class)(oracle.jdbc.driver) -
OracleStatement.getObject(long, int, Class)(oracle.jdbc.driver) -
Accessor.getObject(int, Class)(oracle.jdbc.driver) -
Representation.getObject(Accessor, int, Class)(oracle.jdbc.driver) -
Representation.getRedirector(Class)(oracle.jdbc.drive) -
Redirector.CLASS_TO_REDIRECTOR안의 익명클래스의redirect(Accessor, int)(oracle.jdbc.driver) -
DateTimeCommonAccessor.getZonedDateTime(int)(oracle.jdbc.driver) 9.1.this.tmpBytes가 초기화된 이후에var1값과 함께this.getBytesInternal(int, byte[])메서도 동작시this.tmpBytes에 값이 설정된다. 9.2.this.tmpBytes를 통해LocalDateTime.of(int, int, int, int, int, int, int)에(2020, 2, 3, 0, 0, 0, 0)으로 전달된다. 9.3.ZoneOffset.UTC가 default 값으로 먼저 설정된다. 9.4.this.tmpBytes[11]에Zone이 저장되는 것 같은데, 값이 없을 경우에9.3에서 설정한 offset이var4에 저장된다. 9.5.returen var3.atZoneSameInstant(ZoneId)와 같은 코드로 반환되는데, Zone이 같으므로ZoneOffset.UTC로 설정된다.
