我正在使用Groovy Sql来获取结果。这是我的Linux盒子的输出。
%isql -U abc -P abc -S support
1> sp_configure 'number of open partitions'
2> go
Parameter Name Default Memory Used Config Value Run Value Unit Type
------------------------------ ----------- ----------- ------------ ------------ -------------------- ----------
number of open partitions 500 5201 5000 5000 number dynamic
(1 row affected)
(return status = 0)
1>
我正在使用groovy代码
def sql = Sql.newInstance("jdbc:abc:sybase://harley:6011;DatabaseName=support;",dbuname,dbpassword,Driver)
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
println row.run_value
}
但它给了我
Exception in thread "main" java.sql.SQLSyntaxErrorException: [abc][Sybase JDBC Driver]Invalid column name: run_value
所以它说它无法获取指定的列,有没有办法可以获取结果并显示?
更新
我使用了以下代码
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
println row
}
它给了我
[Parameter Name:number of open partitions , Default: 500, Memory Used: 5201, Config Value: 5000, Run Value: 5000, Unit:number , Type:dynamic ]
我如何获得Run Value
? (因为里面有空格)
row.Run Value
无法肯定
答案 0 :(得分:3)
这有用吗?查询列名的元数据并按索引获取值:
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
(1..row.getMetaData().columnCount).each {
println "${row.metaData().getColumnName( it )} = ${row[ it ]}"
}
}
或者,直接获取列
row.'Run Value'
答案 1 :(得分:0)
另一种选择是getAt(int)。在您的情况下,这将返回'运行值':
row.getAt(-3)
答案 2 :(得分:0)
每年@tim_yates的答案中,我想指出row
具有toRowResult()
方法。它允许简单地作为地图获得一行。如果我们只需要列名称或表宽度,则无需调用getMetadata()
。
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
row.toRowResult().each(){ colName, value ->
println "${colName} = ${value}"
}
}
此代码的作用完全相同,但看起来更加清晰