すべての列をフェッチする Groovy SQL
-
29-10-2019 - |
質問
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
確実には機能しません
解決
これはうまくいきますか?列名のメタデータと索引による値を取得する:
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 つの代替手段は getAt(int) です。あなたの場合、これは「実行値」を返します。
row.getAt(-3)
@ tim_yatesの答えへのadditioannly row
にはtoRowResult()
メソッドがあります。それは単に地図として行を得ることを可能にします。列名やテーブル幅のみが必要な場合は、getMetadata()
を呼び出す必要はありません。
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
row.toRowResult().each(){ colName, value ->
println "${colName} = ${value}"
}
}
.
このコードは絶対に同じであるが、はるかに明確に見える
所属していません StackOverflow