我有一个groovy应用程序,它使用Oracle DB作为DataSource。
在DataSource.groovy中,我设置了:
dataSource {
pooled = true
driverClassName = "oracle.jdbc.driver.OracleDriver"
username = "scott"
password = "tiger
//loggingSql = true
}
由于某些性能原因,我在以下列方式使用sql访问数据库:
def sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger", "oracle.jdbc.driver.OracleDriver")
也就是说,用户名和密码在应用程序中硬连线两次。 我的问题是,是否可以在我的应用程序中解决已在DataSource.groovy中设置的属性用户名和密码。
提前致谢,
路易斯
答案 0 :(得分:10)
解决方案是添加一些导入
import javax.sql.DataSource
import groovy.sql.Sql
import org.codehaus.groovy.grails.commons.ConfigurationHolder
和以下代码:
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
}
答案 1 :(得分:1)
您可以通过数据源创建Sql类,例如
def sql = new Sql(myDataSource)
其中myDataSource - 类DataSource的对象(您可以在DataSource.groovy中声明您的DS)
答案 2 :(得分:0)
你不能只做以下事情吗? (假设dataSource是范围内的变量)
def sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:XE", dataSource.username, dataSource.password, dataSource.driverClassName)