JdbcTemplate и тип данных inet - PullRequest
9 голосов
/ 20 июня 2010

Одна из моих таблиц имеет тип столбца как inet.И когда я пытаюсь выполнить операцию вставки, используя String в качестве типа для столбца inet, он говорит, что «column» ip »относится к типу inet, но выражение имеет тип« меняющийся символ: », что является совершенно допустимым исключением.Теперь мой вопрос заключается в том, как мне указать jdbcTemplate использовать тип Inet вместо String.Я пытаюсь что-то вроде:

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

Тип Inet не указан в классе типов, что я должен передать?

PS Я использую PostgresSql версии 8.4.4.

Ответы [ 2 ]

8 голосов
/ 21 июня 2010

Одна из возможностей - добавить операцию приведения вокруг заполнителя в вашем sql, например ::1001.

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

Это преобразует IP-адрес из текста в inet-серверную сторону, поэтому любые ошибки в плохо отформатированном адресе придется декодировать с сервера ... или просто проверить его перед вставкой и надеяться.

3 голосов
/ 20 июня 2010

Вы должны использовать Typer.OTHER, чтобы позволить postgresql попытаться вывести правильный тип.

Вы можете добавить «stringtype = unspecified» к параметрам соединения JDBC. Это инструктирует водителя позволить postgres попытаться вывести правильный тип.

Третья возможность заключается в создании подкласса PGobject. В более старых драйверах такой подкласс PGinet был предоставлен, но, очевидно, поддержка для этого была прекращена по той или иной причине. Геометрические типы все еще присутствуют, но я думаю, что типы сетей больше не включены в пакет драйверов.

...