Как прочитать каждую строку в выражении groovy-sql?
Я пытаюсь прочитать таблицу с пятью строками и столбцами. Я использовал функцию sql.eachRow для чтения eachRow и присвоения значения строке. Я получаю сообщение об ошибке "Groovy:[Статическая проверка типа] - Нет такого свойства: MachineName для класса: java.lang.Object"
Мой код:
sql.eachRow('select * from [MACHINES] WHERE UpdateTime > :lastTimeRead, [lastTimeRead: Long.parseLong(lastTimeRead)])
{ row ->
def read = row.MachineName
}
но MachineName - это имя моего столбца. Как я могу преодолеть эту ошибку.
2 ответа
Использование динамических свойств со статической проверкой типов невозможно *.
Тем не мение, eachRow
пройдет GroovyResultSet
в качестве первого параметра Closure
, Это означает, что row
имеет тип GroovyResultSet
и поэтому вы можете получить доступ к значению с помощью getAt
row.getAt('MachineName')
должно сработать. В Groovy вы также можете использовать []
-оператором:
row['MachineName']
что эквивалентно первому решению.
*) без расширения проверки типа.
Если вы знаете имя столбца, вы можете просто использовать ниже.
"$row.MachineName"
Но если вы не знаете имя столбца или у вас есть какая-то проблема, вы все равно можете получить к нему доступ, используя массив Select.
sql.eachRow('select * from [MACHINES] WHERE UpdateTime > :lastTimeRead, [lastTimeRead: Long.parseLong(lastTimeRead)])
{ row->
log.info "First value = ${row[0]}, next value = ${row[1]}"
}