java - 如何在参数化选择查询 where IN 子句中传递逗号分隔的 UUID

标签 java sql spring postgresql spring-jdbc

我有一张 table UUID作为键并希望使用 select 查询获取多行,因此查询如下:

select * from table1 where ids in (:commaseperatedUUIDs); //DB is postgreSql

我正在用 Java 代码尝试,我有 List<UUID>其中包含所有 UUID,但如果我当然通过使用字符串操作将其逗号分隔并将查询中的字符串作为参数传递,那么它会抛出 SQL 异常说明

operator does not exist: uuid = character varying

有什么线索吗?

最佳答案

由于您使用的是 Spring,我建议使用 NamedParameterJdbcTemplate,因为它会自动将您的列表参数格式化为数据库可读的格式。

            String sql ="select * from table1 where ids in (:commaseperatedUUIDs)"

            List<Long> commaseparateduuids = new ArrayList<Long>();

            NamedParameterJdbcTemplate namedTemplate = new NamedParameterJdbcTemplate(myJdbcTemplate);

            MapSqlParameterSource parameters = new MapSqlParameterSource();

            parameters.addValue("commaseparateduuids",commaseparateduuids);

            namedTemplate.query(sql, parameters);

另外,请注意某些数据库管理系统(如 Oracle)对 IN 子句参数施加了限制。 postgres 不是这种情况,但如果您将来面临某些数据库迁移,请考虑到这一点。

关于java - 如何在参数化选择查询 where IN 子句中传递逗号分隔的 UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255967/

相关文章:

java - 如何运行 amazon s3 中的 java jar 文件

mysql - SQL按月和年选择日期范围

java - 版本控制静态 Assets 不适用于 Spring Web Flow

spring - 如何在不读取重叠数据的情况下在 spring batch 中运行并发作业

java - 如何将消费者组与 Spring Data Redis for Redis Streams 一起使用(继续获取 NOGROUP)?

java - 请放心,由于响应中数据丢失,测试会间歇性失败

JAVA我做错了什么,我想要线

java - 调用使用泛型定义的方法时为 "error: cannot find symbol "

sql - 计算有多少列具有特定值

java - Oracle 是否会自动回滚废弃的 session ?