You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDBC PreparedStatement传递PostgreSQL ltree[]参数报错求助

解决方案

1. 修正SQL语句

将IN (?)替换为= ANY(?)——PostgreSQL中ANY操作符专门适配数组类型参数,用于匹配数组内的任意元素:

PreparedStatement myStatement = connection.prepareStatement(
        """
        SELECT path
        FROM   my_table
        WHERE  path = ANY ( ? )
        """);

2. 修正数组类型参数

createArrayOf方法的第一个参数是数组元素的类型名,而非数组类型名,因此把"ltree[]"改为"ltree":

ArrayList<String> listWithQuotes = new ArrayList<>();
listWithQuotes.add("A.B.C");
listWithQuotes.add("A.B");

// 传入元素类型"ltree",驱动自动处理为ltree[]数组类型
Array array = connection.createArrayOf("ltree", listWithQuotes.toArray());
myStatement.setArray(1, array);
ResultSet rs = myStatement.executeQuery();

关键说明

  • IN语法仅适用于逗号分隔的静态列表,无法直接匹配JDBC传递的Array对象,而= ANY(?)是PostgreSQL中数组元素匹配的标准写法。
  • createArrayOf要求传入的是基础类型名(如ltree),驱动会自动将其封装为对应数组类型(ltree[])发送给数据库,无需手动添加[]后缀。

内容的提问来源于stack exchange,提问作者P. M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:52:04