2009-09-21 64 views
5

我有一个使用Oracle DB作为数据源的groovy应用程序。Groovy:如何访问已在DataSource中设置的值

在DataSource.groovy中我已经设置:

dataSource { 
pooled = true 
driverClassName = "oracle.jdbc.driver.OracleDriver" 
username = "scott" 
password = "tiger 
//loggingSql = true 
} 

对于在某些点上,我以下列方式使用SQL accesing数据库的一些性能方面的原因:

def sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger", "oracle.jdbc.driver.OracleDriver") 

也就是说,用户名和密码在应用程序中硬连线两次。 我的问题是,如果可以在我的应用程序中解决已在DataSource.groovy中设置的属性用户名和密码。

由于提前,

路易斯

+1

try def myDataSource = ConfigurationHolder.config.dataSource? – 2009-09-23 04:06:20

回答

10

的解决方案是增加一些进口

import javax.sql.DataSource 
import groovy.sql.Sql 
import org.codehaus.groovy.grails.commons.ConfigurationHolder 

和FO下面的代码:

def _url  = ConfigurationHolder.config.dataSource.url 
def _username = ConfigurationHolder.config.dataSource.username 
def _password = ConfigurationHolder.config.dataSource.password 
def _driver = ConfigurationHolder.config.dataSource.driverClassName 
def sql = Sql.newInstance(_url, _username, _password, _driver) 

def query = "<your SQL query>" 
sql.eachRow(query){ 
    println "ID: " + it.id // Whatever you need 
} 
+0

对不起,我annoing :)但如何 def sql =新的Sql(ConfigurationHolder.config.dataSource作为数据源) 如果它的工作,它比newInstance更好,因为你通过DataSource类,这是通常合并和更好地配置的连接。 – 2009-09-23 14:42:50

+1

def sql = new Sql(ConfigurationHolder.config.dataSource as DataSource)不起作用。我们得到一个包含所有dataSource信息的MAP,这些参数与新的Sql不匹配。 解决方法加入Luixv作品,谢谢! – 2010-02-25 22:37:13

+0

从Grails 2.0开始,不推荐使用'ConfigurationHolder'。相反,注入'grailsApplication'对象,然后使用'grailsApplication.config.dataSource。*' – andysh 2015-02-02 14:56:02

0

你就不能执行以下操作? (假设数据源的范围是一个变量)

def sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:XE", dataSource.username, dataSource.password, dataSource.driverClassName) 
+0

dataSource不是此页面范围内的变量。 – Luixv 2009-09-22 08:25:49

1

您可以通过数据源创建SQL类,例如

def sql = new Sql(myDataSource) 

其中myDataSource - 类数据源的对象(你可以让你的DS中的DataSource声明.groovy作为)

+0

感谢您的回答。你能告诉我如何定义“myDataSource”。实际上一个DataSource.groovy我已经定义了一个dataSource。我的问题是如何访问这个变量。 在此先感谢!路易斯 – Luixv 2009-09-22 08:27:44

+0

我不尝试自己。尝试def myDataSource = ConfigurationHolder.config.dataSource,给我回来,如果它确定,他们我是正确的答案 – 2009-09-22 16:40:42

+0

不幸的是你的提案引发异常: org.codehaus.groovy.runtime.metaclass.MethodSelectionException:找不到方法()从此列表中调用:public groovy.sql.Sql#(javax.sql.DataSource)public groovy.sql.Sql#(groovy.sql.Sql)public groovy.sql.Sql#(java .sql.Connection) 无论如何不用担心。我在您的建议中得到了一个解决方案。谢谢! – Luixv 2009-09-23 08:31:27

相关问题