質問

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}"
  }
}
.

このコードは絶対に同じであるが、はるかに明確に見える

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top