0

Groovy で結果セットを読み込むと、マップのコレクションになります。

これらのマップ内の値を更新して書き戻すことができるように思われますが、それを可能にするために groovy に組み込まれているものを見つけることができません。

結果オブジェクトの 1 つのフィールドを反復処理し、各キーと値のペアを取得し、それらを使用して適切な更新ステートメントを作成することにより、変更されたマップを作成できるルーチンを作成することを検討していますが、面倒になる可能性があるため、私は他の誰かがこれを行ったのか、それとも既に Groovy で利用できるのか疑問に思っていました。

ほんの数行のコードのように思えるので、このために休止状態を導入したくありません。私はちょうど許可する小さな「更新」方法を考えています:

def 行 = sql.rows(クエリ)
行[0].name="newName"
update(sql, 行[0])

データベース内の最初の男の名前を更新します。誰かがそのようなモンスターを見たり作成したりしたことがありますか、またはこのようなものがすでにGroovy Sqlに組み込まれていて、私はそれを見逃していますか?

(どのフィールドがキー フィールドであるかを update メソッドに指摘する必要があるかもしれませんが、それは実行可能です...)

4

1 に答える 1

3

メソッドを使用すると、実際にはすべての値がofrowsに読み込まれるため、言及したような更新メソッドを作成せずにデータを更新することは実際には不可能です。ListGroovyRowResult

query結合や集計である列参照などを含めることができるため、一般的なケースではそれを行うことは実際には不可能です.

Sql.eachRowただし、メソッドを使用して単一のテーブルから選択しResultSet、更新可能なテーブルに設定する場合は、基になるResultSetインターフェイスを使用して、繰り返し処理しながら更新できます。

sql.resultSetConcurrency = ResultSet.CONCUR_UPDATABLE
sql.resultSetType = ResultSet.TYPE_FORWARD_ONLY
sql.eachRow(query) { row ->
    row.updateString('name', 'newName')
    row.updateRow()
}

使用するデータベース/ドライバーによっては、更新可能な を作成できない場合がありますResultSet

于 2013-02-09T00:05:11.887 に答える