Я пытаюсь прочитать таблицу с пятью строками и столбцами. Я использовал функцию sql.eachRow для чтения eachRow и присвоения значения String. Я получаю сообщение об ошибке «Groovy: [Проверка статического типа] - Нет такого свойства: MachineName для класса: java.lang.Object»
Мой код:
sql.eachRow('select * from [MACHINES] WHERE UpdateTime > :lastTimeRead, [lastTimeRead: Long.parseLong(lastTimeRead)])
{ row ->
def read = row.MachineName
}
но MachineName - это имя моего столбца. Как я могу побороть эту ошибку.
Вы пробовали имя столбца с нижним регистром, например row.machinename
Использование динамических свойств с проверкой статического типа невозможно *.
Однако 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]}"
}
Вы пробовали без проверки / компиляции статического типа?