java - 在 JDBC/PostgreSQL 中使用 SQL 数组类型更新结果集

标签 java arrays postgresql jdbc

我正在尝试将 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/

相关文章:

java - 不匹配正则表达式中的转义字符

c++ - 使用预处理器反转数组

sql - 根据多个条件创建带有附加列的 View

java - 有没有办法找到我的 Japplet 运行的浏览器和操作系统?

java - 在循环中声明多个变量

php - 为什么我不能在关联数组中添加新的键值对?

javascript - Javascript 中变量不断变成对象而不是数组

javascript - 在 Node.js 中关闭 postgres (pg) 客户端连接

postgresql - 在 Debian Stretch 上安装 PostgreSQL 后没有配置文件

java - 如何在android中的POJO中设置和获取 `ServerValue.TIMESTAMP`?