2012-11-06 3 views
2

하여 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 
    } 
} 

그러나,이 프로그램은 명확와 eachRow 처리에 대한 방법이 없다는 것을 보여줍니다

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, [:], [email protected]] 
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) 

발생 명명 된 매개 변수. 그러나 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와 매개 변수를 이름을 처리 할 수 ​​있습니다.

답변

2

당신이 언급되는 eachRow 방법은 그루비 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에 그루비 버전을 사용하는 가정합니다.

+0

그루비 버전 : 2.0.5 JVM : 1.6.0_35 공급 업체 : Sun Microsystems Inc. 운영 체제 : Windows XP – Kw4s

+0

프로젝트 클래스 경로에 다른 Groovy 버전이있을 가능성이 있습니까? –

+0

제가 Gradle을 사용하고 있기 때문에 그럴 수도 있습니다. 그리고 그 자체로 그루비를 제공하고있는 것처럼 보입니다. – Kw4s

관련 문제