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

Posted

技术标签:

【中文标题】在 JDBC / PostgreSQL 中使用 SQL 数组类型更新结果集【英文标题】:Updating ResultSets with SQL Array types in JDBC / PostgreSQL 【发布时间】:2010-04-26 05:02:39 【问题描述】:

我正在尝试将 SQL Array 类型与 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: 找不到服务器阵列类型 提供的名称 CHARACTER VARYING。在 org.postgresql.jdbc4.AbstractJdbc4Connection.createArrayOf(AbstractJdbc4Connection.java:67) 在 org.postgresql.jdbc4.Jdbc4Connection.createArrayOf(Jdbc4Connection.java:21)

不幸的是,Array 类型似乎没有很好的文档记录——我还没有找到关于如何在任何地方为 PostgreSQL 执行此操作的确切说明:(

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

org.postgresql.jdbc2.TypeInfoCache 的源包含一个可接受的类型名称列表。

考虑createArrayOf() 措辞含糊的合同的一部分:

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

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

祝你好运。

【讨论】:

哎呀,你是对的。我认为“特定于数据库”的意思是“无论数据库使用什么”,正如您所指出的那样,这是错误的。另外值得注意的是,它似乎区分大小写,与其他所有内容不同。谢谢!

以上是关于在 JDBC / PostgreSQL 中使用 SQL 数组类型更新结果集的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure Databricks 中使用 JDBC 从 PostgreSQL 读取表数据?

无法使用 Postgresql 将 JDBC 连接到 sonarqube

使用 JDBC 插入 PostgreSQL 时间类型时出错

在 JDBC 中将 postgresql 表导出为 CSV 的问题

Spring Boot 应用程序 Heroku PostgreSQL 错误:GenerationTarget 遇到异常接受命令:执行 DDL 时出错 ...通过 JDBC 语句

使用 JDBC 连接到 PostgreSql 的本地实例