在 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 表导出为 CSV 的问题
Spring Boot 应用程序 Heroku PostgreSQL 错误:GenerationTarget 遇到异常接受命令:执行 DDL 时出错 ...通过 JDBC 语句