在JDBC / PostgreSQL中使用SQL数组类型更新ResultSet

时间:2010-04-26 05:02:40

标签: java arrays postgresql jdbc

我正在尝试使用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执行此操作:(

有什么想法吗?

1 个答案:

答案 0 :(得分:8)

将“CHARACTER VARYING”更改为“varchar”。命令行psql客户端接受类型名称“CHARACTER VARYING”,但JDBC驱动程序不接受。

org.postgresql.jdbc2.TypeInfoCache的来源包含已接受的类型名称列表。

考虑createArrayOf()的一份含糊不清的合同:

  

typeName是特定于数据库的名称,可以是内置类型的名称,用户定义的类型或此数据库支持的标准SQL类型。

我总是假设驱动程序实现者将短语“特定于数据库的名称”和“由此数据库支持”解释为“接受您想要的任何内容”。但也许您可以将其作为针对Postgres JDBC驱动程序的错误提交。

祝你好运。