我有一个id数组,我想在更新查询中循环。我尝试了几种方法,但遇到了一些错误。
hql = """UPDATE items
SET nOrder = CASE id
"""
//l1 is the list of ids.
for(int i = 0; i <= l1.size(); i++) {
hql += "\n WHEN ${l1[i]} THEN ${i}"
}
hql += "\n END"
hql += "\n WHERE id IN (:id)"
Items.executeUpdate(hql,[id: l1])
即使我尝试过这样的错误。
for(int i = 0; i <= l1.size(); i++) {
Items.executeQuery("UPDATE Items SET nOrder = CASE id WHEN ${l1[i]} THEN ${i} END WHERE id IN (:id)",[id: l1])
}
错误消息。
期待“然后”,在第1行第61列附近找到','UPDATE org.items SET nOrder = CASE id WHEN 2,1 THEN 0 END WHERE id IN(:id)]
任何人都可以让我知道我做错了什么吗?
答案 0 :(得分:0)
您正在从(用户提供的?)字符串构建SQL,这是一个可怕的想法。错误归结为:WHEN 2,1 THEN 0
,这是无效的SQL(请注意那里的,
)。你很可能在${l1[i]}
中将一些浮点数存储为字符串,或者使用语言环境运行,其中数字用,
等分隔。你应该使用param替换(就像你已经为{{1}做的那样}})也在所有其他地方(没有:id
和${l1[i]}
)。 E.g:
$i