0

当您在 Groovy 中读取结果集时,它会出现在一组映射中。

似乎您应该能够更新这些映射中的值并将它们写回,但是我找不到任何内置于 groovy 中的东西来允许我这样做。

我正在考虑编写一个例程,允许我通过迭代其中一个结果对象的字段、获取每个键/值对并使用它们创建适当的更新语句来编写修改后的映射,但这可能很烦人,所以我想知道是否有其他人这样做过,或者它是否已经在 groovy 中可用。

这似乎只是几行代码,所以我宁愿不为此引入休眠。我只是在考虑一种允许的“更新”方法:

def 行=sql.rows(查询)
行[0].name="新名称"
更新(sql,行[0])

更新数据库中第一个人的名字。任何人都见过/创造了这样一个怪物,还是像这样的东西已经内置在 Groovy Sql 中而我只是想念它?

(我想您可能必须指出更新方法哪个字段是关键字段,但这是可行的......)

4

1 回答 1

3

使用该rows方法实际上会将所有值读入 a Listof 中,GroovyRowResult因此如果不创建您提到的更新方法,则实际上不可能更新数据。

在一般情况下实际上不可能这样做,因为您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 回答