Arrays 在hql内的数组上循环?
我有一个ID数组,我想在更新查询中循环它。我试过几种方法,但也有一些错误Arrays 在hql内的数组上循环?,arrays,grails,groovy,Arrays,Grails,Groovy,我有一个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 = """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])
hql=“”更新项目
SET nOrder=案例id
"""
//l1是ID的列表。
对于(int i=0;i您正在从(用户提供的?)字符串构建SQL,这是一个可怕的想法。错误归结为:当2,1时,然后0
,这是无效的SQL(注意,
),您很可能在${l1[i]}中有一些浮点存储为字符串
或使用区域设置运行,其中数字用,
等分隔。您应该在所有其他位置(编号${l1[i]}
和$i
)也使用参数替换(就像您对:id
所做的那样)。例如:
iis有更好的方法来统计记录吗?这里的我正在尝试循环一个存储在l1中的id数组。同时我正在更新多个记录的列表,并在where子句中传递id列表。请告诉我为什么id,顺序?此代码只是一个示例。如果您想要案例…那么
行为,您很可能需要构建一个映射。这里的键不是在SQL语句中使用${}文本替换。
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])
}
l1.eachWithIndex{ id, order ->
Items.executeQuery("UPDATE Items SET nOrder=:order WHERE id=:id",[id:id, order:order])
}