Обновление ResultSets с Типами массива SQL в JDBC / PostgreSQL

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

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

nicknames           CHARACTER VARYING(255)[]    NOT NULL

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

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

(p.getNicknames() возвраты a List<String>)

но я вижу:

org.postgresql.util. PSQLException: Не удалось найти тип массива сервера для обеспеченного ВАРЬИРОВАНИЯ СИМВОЛА имени. в org.postgresql.jdbc4. AbstractJdbc4Connection.createArrayOf(AbstractJdbc4Connection.java:67) в org.postgresql.jdbc4. Jdbc4Connection.createArrayOf(Jdbc4Connection.java:21)

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

Какие-либо идеи?

5
задан Steven Schlansker 26 April 2010 в 05:02
поделиться

1 ответ

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

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

Рассмотрим часть двусмысленно сформулированного контракта для createArrayOf () :

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

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

Удачи.

8
ответ дан 14 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: