Я пытаюсь использовать Тип массива 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 где угодно :(
Какие-либо идеи?
Измените "CHARACTER VARYING" на "varchar". Клиент командной строки psql
принимает имя типа "CHARACTER VARYING", а драйвер JDBC - нет.
Источник для org.postgresql.jdbc2.TypeInfoCache
содержит список допустимых имен типов.
Рассмотрим часть двусмысленно сформулированного контракта для createArrayOf ()
:
typeName - это имя, зависящее от базы данных, которое может быть именем встроенного типа, определяемого пользователем типа. или стандартный тип SQL, поддерживаемый этой базой данных.
Я всегда предполагал, что разработчики драйверов интерпретируют фразы «имя, зависящее от базы данных» и «поддерживается этой базой данных» как означающие «принимать все, что вы хотите». Но, возможно, вы могли бы зарегистрировать это как ошибку в драйвере Postgres JDBC.
Удачи.