groovy - именованные параметры Sql eachRow с картой

Я пытаюсь выполнить выбор следующим образом:

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.


person Kw4s    schedule 06.11.2012    source источник


Ответы (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)

Я предполагаю, что вы используете версию Groovy до 1.8.7.

person Andre Steingress    schedule 06.11.2012
comment
к сожалению, нет: Groovy Версия: 2.0.5 JVM: 1.6.0_35 Поставщик: Sun Microsystems Inc. ОС: Windows XP - person Kw4s; 06.11.2012
comment
есть ли шанс, что в пути к классам ваших проектов есть еще одна версия Groovy? - person Andre Steingress; 06.11.2012
comment
Ну, это может быть так, поскольку я использую Gradle, и кажется, что он предоставляет свой собственный groovy - person Kw4s; 06.11.2012