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 に答える