2009-09-21 63 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

相關問題