我正在尝试将 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: Unable to find server array type for provided name CHARACTER VARYING. at org.postgresql.jdbc4.AbstractJdbc4Connection.createArrayOf(AbstractJdbc4Connection.java:67) at org.postgresql.jdbc4.Jdbc4Connection.createArrayOf(Jdbc4Connection.java:21)
不幸的是,Array 类型似乎没有很好的文档记录——我没有在任何地方找到关于如何为 PostgreSQL 执行此操作的确切说明:(
有什么想法吗?
最佳答案
将“CHARACTER VARYING”更改为“varchar”。命令行 psql
客户端接受类型名称“CHARACTER VARYING”,但 JDBC 驱动程序不接受。
org.postgresql.jdbc2.TypeInfoCache
的源代码包含一个可接受的类型名称列表。
考虑 createArrayOf()
的措辞含糊的契约(Contract)部分:
The typeName is a database-specific name which may be the name of a built-in type, a user-defined type or a standard SQL type supported by this database.
我一直假设驱动程序实现者将短语“特定于数据库的名称”和“受此数据库支持”解释为“接受你想要的任何东西”。但也许您可以将此作为针对 Postgres JDBC 驱动程序的错误进行归档。
祝你好运。
关于java - 在 JDBC/PostgreSQL 中使用 SQL 数组类型更新结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711224/