Как прочитать каждую строку в выражении groovy-sql? - PullRequest
0 голосов
/ 26 апреля 2018

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

0 голосов
/ 27 апреля 2018

Если вы знаете имя столбца, вы можете просто использовать ниже.

"$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]}"
}
0 голосов
/ 26 апреля 2018

Использование динамических свойств со статической проверкой типов невозможно *.

Однако eachRow передаст GroovyResultSet в качестве первого параметра Closure. Это означает, что row имеет тип GroovyResultSet, и поэтому вы можете получить доступ к значению, используя getAt

row.getAt('MachineName')

должно работать. В groovy вы также можете использовать оператор []:

row['MachineName']

, что эквивалентно первому решению.

*) без расширения для проверки типа .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...