【问题标题】:Updating ResultSets with SQL Array types in JDBC / PostgreSQL在 JDBC / PostgreSQL 中使用 SQL 数组类型更新结果集
【发布时间】: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 执行此操作的确切说明:(

有什么想法吗?

【问题讨论】:

    标签: java arrays postgresql jdbc


    【解决方案1】:

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

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

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

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

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

    祝你好运。

    【讨论】:

    • 哎呀,你是对的。我认为“特定于数据库”的意思是“无论数据库使用什么”,正如您所指出的那样,这是错误的。另外值得注意的是,它似乎区分大小写,与其他所有内容不同。谢谢!
    猜你喜欢
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2022-01-19
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多