2014-10-21 4 views
0

Я в настоящее время делает список SQL строк из базы данных с помощью:Передача списка SQL каждой строки вызова Groovy

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 исходит из ввода с несколькими входами, поэтому может быть либо одиночная строка, либо массив строк, содержащий идентификаторы. Есть ли способ выполнить итерацию этих идентификаторов внутри метода eachRow?

Я хотел бы быть в состоянии выполнить что-то вроде:

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

Но я не совсем уверен, что есть способ вызова eachRow с этой функциональностью. Если этого не происходит, есть ли другой способ визуализации результатов, не сохраняя их в списке?

ответ

1

Я думаю, что вы можете render каждая строка:

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

Отлично работает! Хотя, поскольку я пытался распечатать значения float, я не могу называть их JSON, если я не передам их на карту. – janDro

1

Существует rows(), чтобы вернуть список, а не работать с ним (например, eachRow()). Он также разделяет все разные аргументы. Например .:

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

Это возвращает не сериализуемое исключение – janDro

+0

@janDro Вы используете 'collect'? – cfrick

+0

Первый, хотя я думаю, что это будет как для – janDro

Смежные вопросы