我创建了一个
Grails 3.3.8
项目。数据源 (Oracle) 配置已在 application.yml
文件中成功完成。但是当我在 groovy 类中使用数据源时,我面临以下错误:
Caused by GroovyRuntimeException: Ambiguous method overloading for method groovy.sql.Sql#<init>.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[interface java.sql.Connection]
[interface javax.sql.DataSource]
我的代码是:
package DATABASE_CONF
import groovy.sql.Sql
/**
*
* @author CESC
*/
public class dbconn {
def dataSource
public String showname2() {
def sql = new Sql(dataSource)
def namestr = ""
sql.eachRow('select * from TEST_TB') {
tp ->
namestr = namestr + "<br>" + tp.NAME
}
sql.close()
return namestr
}
}
您的类无法解析
dataSource
属性,因此会出现 null 且不明确的方法重载异常。
原因可能是您的类位于
src
文件夹中并且不参与 bean(自动)装配。有几种方法可以解决这个问题:
so it will get the
dataSource`自动注入(推荐)dataSource
声明为 showname2()
方法的参数,并在每次调用时显式传递它。我收到了完全相同的错误消息。我发现有效的方法是手动注入 dataSource bean,如下所示:
class SomeClass {
def dataSource = grails.util.Holders.applicationContext.getBean("dataSource")
def myMethod {
Sql sql = new Sql(dataSource)
//Enter a SQL query
}
}