Как читать каждую строку в инструкции Groovy-sql?

Я пытаюсь прочитать таблицу с пятью строками и столбцами. Я использовал функцию 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 - это имя моего столбца. Как я могу побороть эту ошибку.

Вы пробовали без проверки / компиляции статического типа?

cfrick 26.04.2018 13:26

Вы пробовали имя столбца с нижним регистром, например row.machinename

Bhanuchander Udhayakumar 26.04.2018 13:33
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
1 239
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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]}"
}

Другие вопросы по теме