SQLOutputImpl
SQLOutputImpl (UDT 커스텀 매핑 출력 스트림)
커스텀 매핑된 사용자 정의 타입(UDT)의 속성을 데이터베이스에 다시 쓰기 위한 출력 스트림입니다. 드라이버가 내부적으로 사용하며, 애플리케이션 프로그래머가 직접 호출하지 않습니다.
본문
애플리케이션이 PreparedStatement.setObject를 호출하면, 드라이버는 쓰려는 값이 커스텀 매핑이 있는 UDT인지 확인합니다. 맞다면 타입 맵에 이 UDT에 대해 SQLData를 구현한 클래스의 Class 객체가 들어 있습니다. 값이 SQLData의 인스턴스라면 드라이버는 SQLOutputImpl 인스턴스를 만들어 SQLData.writeSQL에 전달하고, writeSQL은 내부에서 적절한 SQLOutputImpl.writeXXX 메서드들을 호출해 SQLData 객체의 데이터를 출력 스트림에 SQL 사용자 정의 타입 표현으로 씁니다.
생성자는 속성 벡터(attributes)와 타입 맵(map)으로 초기화되며, 드라이버는 이 타입 맵을 이용해 어떤 SQLData.writeSQL을 호출할지 결정합니다. 각 쓰기 메서드는 Java 타입 값을 받아 드라이버가 해당 SQL 타입으로 변환한 뒤 데이터베이스로 보냅니다. 예를 들어 writeInt는 SQL INTEGER로, writeBigDecimal은 SQL NUMERIC으로, writeString은 SQL CHAR/VARCHAR/LONGVARCHAR로 변환해요.
writeObject 메서드는 주어진 SQLData 객체가 null이면 SQL NULL을, 그렇지 않으면 해당 객체의 writeSQL을 호출해 속성들을 스트림에 순서대로 씁니다. 속성은 SQL 정의에 나열된 순서와 동일하게 SQLInput 입력 스트림에서 읽고 SQLOutputImpl 출력 스트림에 써야 합니다.
대표적인 메서드
public SQLOutputImpl(Vector<?> attributes, Map<String,?> map) throws SQLException
public void writeInt(int x) throws SQLException
public void writeString(String x) throws SQLException
public void writeObject(SQLData x) throws SQLException
public void writeRef(Ref x) throws SQLException