1

我正在尝试读取具有五行和五列的表格。我使用 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 是我的列名。我该如何克服这个错误。

4

2 回答 2

1

无法将动态属性与静态类型检查一起使用*。

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

row.getAt('MachineName')

应该管用。在 groovy 中,您还可以使用[]-operator:

row['MachineName']

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

*) 没有类型检查扩展

于 2018-04-26T11:32:46.377 回答
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]}"
}
于 2018-04-27T09:41:34.030 回答