Обновление ResultSets с типами массивов SQL в JDBC / PostgreSQL - PullRequest
5 голосов
/ 26 апреля 2010

Я пытаюсь использовать тип массива SQL с PostgreSQL 8.4 и драйвером JDBC4.

Мой столбец определяется следующим образом:

nicknames           CHARACTER VARYING(255)[]    NOT NULL

и я пытаюсь обновить его таким образом:

row.updateArray("nicknames", 
    connection.createArrayOf("CHARACTER VARYING", p.getNicknames().toArray()));

(p.getNicknames() возвращает List<String>)

но я вижу:

org.postgresql.util.PSQLException: Невозможно найти тип массива сервера для предоставленное имя CHARACTER VARYING. в org.postgresql.jdbc4.AbstractJdbc4Connection.createArrayOf (AbstractJdbc4Connection.java:67) в org.postgresql.jdbc4.Jdbc4Connection.createArrayOf (Jdbc4Connection.java:21)

К сожалению, типы Array, похоже, плохо документированы - я нигде не нашел упоминания о том, как именно это сделать для PostgreSQL: (

Есть идеи?

1 Ответ

8 голосов
/ 26 апреля 2010

Измените "CHARACTER VARYING" на "varchar". Клиент командной строки psql принимает имя типа «CHARACTER VARYING», а драйвер JDBC - нет.

Источник org.postgresql.jdbc2.TypeInfoCache содержит список допустимых имен типов.

Рассмотрим часть неоднозначного контракта на createArrayOf():

typeName - это специфичное для базы данных имя, которое может быть именем встроенного типа, пользовательского типа или стандартного типа SQL, поддерживаемого этой базой данных.

Я всегда предполагал, что разработчики драйверов интерпретируют фразы «имя, относящееся к базе данных» и «поддерживаемый этой базой данных» как «принимать все, что вы хотите». Но, возможно, вы могли бы сообщить об этом как об ошибке в драйвере Postgres JDBC.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...