JDBC API를 사용하다 보면 Java Object를 DB TYPE에 맞게 값을 읽어오고 파라미터로 세팅해줄 일들이 많이 생긴다.
java,sql.ResultSet의 getXXX methods는 값을 읽어오는 대표적인 경우이고,
java.sql.PreparedStatement의 SetXXX methods 들은 값을 세팅하는 대표적인 경우라고 할 수있다.
Mapping이 어떻게 되는 지는 Getting Started with the JDBC API중 Mapping SQL and Java Types을 보면 테이블로 친절하게 정리가 되어 있어서 말하는 것을 생략하도록 하고 여기서 말하고 싶은 것은 Java Types과, Java Object Types인 경우 서로 Mapping이 다른 이유에 대하여 설명하고자 한다.
간단하게 설명하면 Java Object Types과 JDBC Types 타입간의 Mapping은 setObject 및 getObject 인 경우 사용하는 Mapping이다. 그외의 setString, setShort와 같은 Method를 사용할 경우에는 Java Type과 JDBC Types 간의 Mapping을 사용한다.
두가지가 거의 내용이 대동소이 하지만 JDBC Types이 BIT, TINYINT, SMALLINT, INTEGER, BIGINT, REAL, FLOAT, DOUBLE 인경우 차이가 나고 그 이유는 Java Type은 primitive 타입(ex int)과 매핑되고, Java Object Types은 wrpa Object(ex Integer)와 연결되는 식으로 변경된다는 점이다. 특히 특이한것은 TINYINT, SMALLINT인데 Java Type에서는 각각 byte와 short 로 Mapping 되나 Java Object Type에서는 모두 Integer로 연결된다. Byte와 Short가 있는데도 불구하고 이렇게 되는 이유는 솔직히 모른다. 나중에 알게되면 글을 수정하도록 하겠다.
참고로 JDBC Type은 java.sql.Types에 정의되어 있다.
댓글 없음:
댓글 쓰기