我有一张 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/