Groovy Sql获取所有列

时间:2012-01-17 12:43:47

标签: sql groovy sybase-ase

我正在使用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无法肯定

3 个答案:

答案 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}"
  }
}

此代码的作用完全相同,但看起来更加清晰