PostgreSQL删除UUID列表对应行报错:cannot cast type uuid[] to uuid
解决PostgreSQL通过JDBC删除指定UUID列表记录的问题
你遇到的错误根源在于:SQL语句里的IN(?)是用来匹配单个值的集合,但你传入的是UUID数组,PostgreSQL无法将数组直接转换为单个UUID类型,因此抛出类型转换错误。
修正后的代码写法
把SQL中的IN(?)替换为= ANY(?),PostgreSQL的= ANY()语法可以直接匹配数组类型的参数,完美适配你的需求,代码修改如下:
List<UUID> s = new ArrayList<>(); s.add(UUID.fromString("1a93f6f4-c1b4-489a-83dc-a7fe0a15d8ce")); s.add(UUID.fromString("1a93f6f4-c1b4-489a-83dc-a7fe0a15d8ce")); PreparedStatement stm = conn.prepareStatement( "delete from table_name where id = ANY(?)"); Array array = conn.createArrayOf("UUID", s.toArray()); stm.setArray(1, array); int deletedCount = stm.executeUpdate();
补充说明
如果一定要用IN语法,需要动态生成和UUID列表长度一致的占位符(比如IN(?, ?)),但这种方式需要手动拼接SQL语句,不仅容易出错,还存在SQL注入风险,因此更推荐使用= ANY()的方案。
内容的提问来源于stack exchange,提问作者Adelin
相关产品推荐
相关产品推荐

