我有一个以UUID
为键的表,想用select query获取多行,所以查询如下:
select * from table1 where ids in (:commaseperatedUUIDs); //DB is postgreSql
我在Java代码中尝试它,我有List<UUID>
,其中包含所有UUID,但如果我使用String操作将其逗号分隔,并将查询中的String作为参数传递,则会抛出SQL异常,声明
operator does not exist: uuid = character varying
有线索吗?
3条答案
按热度按时间wkyowqbh1#
由于您使用的是Spring,我建议使用NamedParameterJdbcTemplate,因为它会自动将列表参数格式化为数据库可读的格式。
另外,请注意,一些dbms(如Oracle)对
IN
子句参数施加了限制。postgres不是这种情况,但如果您将来面临一些数据库迁移,请考虑到这一点。1sbrub3j2#
问题是您的查询计算结果为:
而不是所需的形式:
您可以手动生成查询,添加多个参数并分别设置每个参数:
或者使用PreparedStatement::setArray方法:
92vpleto3#
如果您使用Spring,则可以利用命名参数支持并将
:commaseperatedUUIDs
的值作为java.util.List
传入。http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-in-clause