Skip to content

ojdbc(oracle) 사용시 DB 타입 Date 값이 ZonedDateTime 변환되는 과정 분석 #5

@wicksome

Description

@wicksome

커스텀 핸들러 없는 경우

DB내에 필드타입은 DATE인 경우이다.

  • com.oracle.ojdbc:ojdbc8:19.3.0.0
  • org.mybatis:mybatis:3.5.3
  1. mybatis에서 제공하는 ZonedDateTimeHandler.getNullableResult(ResultSet, String) (org.apache.ibatis.type)
  2. OracleResultSet.getObject(String, Class) (oracle.jdbc.driver)
  3. InsensitiveScrollableResultSet.getObject(int, Class) (oracle.jdbc.driver)
  4. OracleStatement.getObject(long, int, Class) (oracle.jdbc.driver)
  5. Accessor.getObject(int, Class) (oracle.jdbc.driver)
  6. Representation.getObject(Accessor, int, Class)(oracle.jdbc.driver)
  7. Representation.getRedirector(Class) (oracle.jdbc.drive)
  8. Redirector.CLASS_TO_REDIRECTOR 안의 익명클래스의 redirect(Accessor, int) (oracle.jdbc.driver)
  9. 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로 설정된다.

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions