我正在尝试使用PostgreSQL 8.4和JDBC4驱动程序的SQL数组类型。
我的专栏定义如下:
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)
不幸的是,数组类型似乎没有很好的文档记录 - 我还没有找到确切的提到如何在任何地方为PostgreSQL执行此操作:(
有什么想法吗?
答案 0 :(得分:8)
将“CHARACTER VARYING”更改为“varchar”。命令行psql
客户端接受类型名称“CHARACTER VARYING”,但JDBC驱动程序不接受。
org.postgresql.jdbc2.TypeInfoCache
的来源包含已接受的类型名称列表。
考虑createArrayOf()
的一份含糊不清的合同:
typeName是特定于数据库的名称,可以是内置类型的名称,用户定义的类型或此数据库支持的标准SQL类型。
我总是假设驱动程序实现者将短语“特定于数据库的名称”和“由此数据库支持”解释为“接受您想要的任何内容”。但也许您可以将其作为针对Postgres JDBC驱动程序的错误提交。
祝你好运。