将列表传递给SQL,每行调用Groovy

时间:2014-10-21 14:31:53

标签: sql grails groovy

我目前正在使用以下方式从数据库中呈现sql行列表:

Sql sql = new Sql(dataSource)
def list = []
def index = 0
params.mrnaIds.each { mrnaName ->
   sql.eachRow ("select value from patient_mrna where mrna_id=$mrnaId") { row ->
      list[index] = row.value
      index++
   }
}
render list

但是我想避免在渲染之前将值分配给列表。

变量params.mrnaIds来自多选输入,因此它可以是单个字符串,也可以是包含id的字符串数组。有没有办法在eachRow方法中迭代这些id?

我希望能够执行以下内容:

render sql.eachRow ("select value from patient_mrna where mrna_id=?", params.mrnaIds) { row ->
   list[index] = row.value
   index++
}

但我不完全确定有一种方法可以使用此功能调用eachRow。如果没有,是否有其他方法来呈现结果而不将它们存储在列表中?

2 个答案:

答案 0 :(得分:1)

rows()返回列表而不是使用它(如eachRow()所用)。它还分享了所有不同的论点。 E.g:

render sql.rows("select value from patient_mrna where mrna_id=?", params).collect{ it.value }

答案 1 :(得分:1)

我认为你可以render每一行:

sql.eachRow( someQuery, someParams ){ row ->
  render row as JSON
}