当您在Groovy中读取结果集时,它会出现一组地图。
好像你应该能够更新这些地图中的值并将它们写回来,但是我找不到任何内置于groovy的内容以允许我这样做。
我正在考虑编写一个例程,允许我通过遍历其中一个结果对象的字段来编写修改后的映射,获取每个键/值对并使用它们来创建适当的更新语句,但它可能是令人烦恼,所以我想知道是否有其他人已经这样做了,或者是否已经在groovy中可用。
这似乎只是几行代码,所以我宁愿不为此引入hibernate。我只是想一个允许的小“更新”方法:
def rows=sql.rows(query) rows[0].name="newName" update(sql, rows[0])
更新数据库中的第一个人的名字。任何人看到/创建了这样的怪物,或者是已经内置到Groovy Sql中的这样的东西,我只是错过了它?
(我想你可能不得不指出更新方法哪个字段是关键字段,但这是可行的......)
答案 0 :(得分:2)
使用rows
方法实际上会将所有值读出到List
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
。