使用groovy从对象更新SQL

时间:2013-02-08 23:49:56

标签: sql groovy

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

好像你应该能够更新这些地图中的值并将它们写回来,但是我找不到任何内置于groovy的内容以允许我这样做。

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

这似乎只是几行代码,所以我宁愿不为此引入hibernate。我只是想一个允许的小“更新”方法:

def rows=sql.rows(query)
rows[0].name="newName"
update(sql, rows[0])

更新数据库中的第一个人的名字。任何人看到/创建了这样的怪物,或者是已经内置到Groovy Sql中的这样的东西,我只是错过了它?

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

1 个答案:

答案 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