1

我正在加载一个类并执行一些 sql select 语句,似乎import groovy.sql.Sql需要导入。如何在加载类时加载一些库?

我的代码(如果我删除 Sql 操作可以正常工作)

def fClass = new GroovyClassLoader().parseClass( new File( 'plugin/Pi.groovy' ) )
result=fClass.newInstance().buildTags( params, i9piparams, "userRoleCount")

pi.groovy

public class Pi{
    def result

    private def getDbUrl(dbdriver,dbhost,dbport,dbname)
    {
        return "$dbdriver:@$dbhost:$dbport:$dbname"
    }

    public def buildTags(Map<String,String> params,Map<String,String> i9piparams,def i9piType)
    {

        println params
        println i9piparams

        /*some Sql operation*/
        Driver="oracle.jdbc.driver.OracleDriver"
            dbdriver="jdbc:oracle:thin"
        def url=getDbUrl(dbdriver,params.tns,i9piparams.dbport,i9piparams.dbname)           

            def sql = Sql.newInstance(url,params.u,params.x,Driver)

            sql.eachRow("select name, value from v\$parameter where name = 'open_cursors'"){ row ->
                result.name=row.name
                result.value=row.value
            }

    }
}

输出

[pd:admin, u:zx5531d, tns:foner, dh:abds, dn:D35531, dp:11531, un:admin, x:cx15531]
[:, dbname:orcl, dbport:1521, dbtype:oracle]
Exception in thread "main" groovy.lang.GroovyRuntimeException: Could not find matching constructor for: groovy.sql.Sql(org.codehaus.groovy.runtime.GStringImpl, groovy.util.slurpersupport.Attributes, java.lang.String, java.lang.String)
.
.
.
4

1 回答 1

2

你可以尝试改变你的线路:

def sql = Sql.newInstance(url,params.u,params.x,Driver)

def sql = Sql.newInstance( url, 'zx5531d', params.x, Driver )

我怀疑的是,text()当您从 XML 中读取属性时,您需要调用它们,以便获得一个String而不是一个groovy.util.slurpersupport.Attributes类。

另外,为什么有Driver一个大写的首字母?

并且(不确定是什么parameter),但您可能想要更改:

"select name, value from v\$parameter where name = 'open_cursors'"

"select name, value from v\${Sql.expand(parameter)} where name = 'open_cursors'"
于 2012-04-23T12:14:35.220 回答