【问题标题】:groovy - Sql eachRow named parameters with mapgroovy - 带有映射的 Sql eachRow 命名参数
【发布时间】:2012-10-26 05:33:56
【问题描述】:

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

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)

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

【问题讨论】:

    标签: sql select groovy named-parameters


    【解决方案1】:

    您所指的 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 版本。

    【讨论】:

    • 不幸的是,没有:Groovy 版本:2.0.5 JVM:1.6.0_35 供应商:Sun Microsystems Inc. 操作系统:Windows XP
    • 您的项目类路径中是否有可能存在另一个 Groovy 版本?
    • 嗯,可能是这样,因为我使用的是 Gradle,而且它似乎提供了自己的 groovy
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多