我正在尝试阅读一个有五行和一列的表。我使用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是我的列名。我怎样才能克服这个错误。
答案 0 :(得分:1)
无法使用动态属性和静态类型检查*。
但是,eachRow
会将GroovyResultSet
作为第一个参数传递给Closure
。这意味着row
的类型为GroovyResultSet
,因此您可以使用getAt
row.getAt('MachineName')
应该有效。在groovy中,您还可以使用[]
- 运算符:
row['MachineName']
这相当于第一个解决方案。
答案 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]}"
}