sql - groovy - 带 map 的 Sql everyRow 命名参数

标签 sql select groovy named-parameters

我正在尝试像这样执行选择:

def queries = [
    [
        paramQuey: "",
        mainQuery: "SELECT * FROM SOME_TABLE"
    ],
    [
        paramQuey: "SELECT SOME_COLUMN AS COUNT FROM A_TABLE WHERE SOMETHING=3",
        mainQuery: "SELECT * FROM OTHER_TABLE WHERE ROWNUM<:COUNT"
    ]
]

queries.each {
    def params = [:]
    if(!it.paramQuery.isEmpty()) {
        params = sql.firstRow(it.paramQuery)
    }
    sql.eachRow(mainQuery, params) { //<--here's my problem
        //do something
    }
}

但是,程序抛出

Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: groovy.sql.Sql.eachRow() is applicable for argument types: (java.lang.String, java.util.LinkedHashMap, MyClass$_execute_closure4) values: [SELECT * FROM SOME_TABLE, [:], MyClass$_execute_closure4@b3600d]
Possible solutions: eachRow(java.lang.String, groovy.lang.Closure), eachRow(java.lang.String, groovy.lang.Closure, groovy.lang.Closure), eachRow(java.lang.String, java.util.List, groovy.lang.Closure), eachRow(groovy.lang.GString, groovy.lang.Closure), eachRow(groovy.lang.GString, groovy.lang.Closure, groovy.lang.Closure), eachRow(java.lang.String, int, int, groovy.lang.Closure)

这清楚地表明没有方法可以使用命名参数处理eachRow。然而根据http://groovy.codehaus.org/api/groovy/sql/Sql.html有:

    void    eachRow(java.lang.String sql, java.util.Map params, Closure closure)
    void    eachRow(java.lang.String sql, java.util.Map params, Closure metaClosure, Closure rowClosure)
    void    eachRow(java.lang.String sql, java.util.Map map, Closure metaClosure, int offset, int maxRows, Closure rowClosure)
    void    eachRow(java.lang.String sql, java.util.Map params, int offset, int maxRows, Closure closure)
    void    eachRow(java.util.Map params, java.lang.String sql, Closure closure)
    void    eachRow(java.util.Map params, java.lang.String sql, Closure metaClosure, Closure rowClosure)
    void    eachRow(java.util.Map map, java.lang.String sql, Closure metaClosure, int offset, int maxRows, Closure rowClosure)
    void    eachRow(java.util.Map params, java.lang.String sql, int offset, int maxRows, Closure closure)

这让我想知道:我做错了什么,以及如何使用 everyRow 处理命名参数。

最佳答案

您所引用的 eachRow 方法自 Groovy 1.8.7 起可用:

http://groovy.codehaus.org/api/groovy/sql/Sql.html#eachRow(java.lang.String,%20java.util.Map,%20groovy.lang.Closure )

我假设您使用的是 1.8.7 之前的 Groovy 版本。

关于sql - groovy - 带 map 的 Sql everyRow 命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13248084/

相关文章:

sql - 根据列值有条件选择行

html - 如何更改下拉菜单(选择)中第一个选项标签的字体大小?

mysql - 所选列会影响 MySQL 结果中的行顺序吗?

groovy - 我的Gradle项目取决于commons-io 2.4,但是Gradle将$ GRADLE_HOME/commons-io-1.4.jar放入类路径中,从而导致失败

Groovy:for..in 比 .each 快得多吗?

sql - 在 SELECT 列表中两次使用 jsonb_array_elements_text() 的结果不一致

sql - 如何在 MS Access 中仅查看第一个值,其余为空白?

MySQL:使用 If else 更新查询

MySQL:查询时间序列中某个日期之前的最后一个值的最佳实践

Groovy 控制台读取输入