如何读取groovy-sql语句中的每一行?

时间:2018-04-26 11:13:04

标签: sql groovy 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是我的列名。我怎样才能克服这个错误。

2 个答案:

答案 0 :(得分:1)

无法使用动态属性和静态类型检查*。

但是,eachRow会将GroovyResultSet作为第一个参数传递给Closure。这意味着row的类型为GroovyResultSet,因此您可以使用getAt

访问该值
row.getAt('MachineName')

应该有效。在groovy中,您还可以使用[] - 运算符:

row['MachineName']

这相当于第一个解决方案。

*)没有type checking extension

答案 1 :(得分:0)

如果你知道列名,你可以使用下面的。

"$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]}"
}