2010-06-20 4 views
7

내 테이블 중 하나에 inet과 같은 열 형식이 있습니다. 그리고 inet 열의 유형으로 String을 사용하여 삽입 연산을 수행하려고하면 "ip"열은 "inet 유형"이지만 표현식은 다양한 문자 유형으로 표시됩니다. "완벽하게 유효한 예외입니다. 이제, 제 질문은 jdbcTemplate에 String 대신 inet 유형을 사용하도록 지시하는 방법입니다.JdbcTemplate 및 inet 데이터 형식

MapSqlParameterSource params = new MapSqlParameterSource(); 
params.addValue("ip",new SqlParameterValue(Types.??, conn.getIPAddress())); 

유형 클래스에 나열되어 있지 않습니다 INET 형, 내가 무엇을 통과한다 내가 좋아하는 뭔가를하려고 해요?

P. PostgresSql 버전 8.4.4를 사용하고 있습니다.

답변

3

Postgresql이 올바른 유형을 추론하도록하려면 Typer.OTHER를 사용해야합니다.

"stringtype = unspecified"를 JDBC 연결 매개 변수에 추가 할 수 있습니다. 이 명령은 드라이버에게 포스트그레스가 올바른 유형을 추론하도록합니다.

세 번째 가능성은 PGobject를 서브 클래 싱하는 것입니다. 구형 드라이버에서 이러한 서브 클래스 인 PGinet이 제공되었지만, 분명히 이것에 대한 지원은 하나의 이유 또는 다른 이유 때문에 삭제되었습니다. 기하학적 유형은 여전히 ​​존재하지만 네트워크 유형은 더 이상 드라이버 패키지에 없다고 생각합니다. ,

insert into t(ip) values(?::inet) 

이 대신 서버 측 INET 텍스트에서 IP 주소를 변환이 나쁜 포맷에 대해 너무 오류 :

6

하나의 가능성은 예를 들어, 당신의 SQL에 자리 주위에 주조 작업을 추가하는 것입니다 주소는 서버에서 해독되어야합니다 ... 아니면 삽입하고 희망하기 전에 유효성을 검사해야합니다.