2012-03-25 60 views
2

在我的应用程序中,有一些地方我想使用纯SQL。当我在Sql.newInstance中硬编码连接细节时,它工作正常。出于显而易见的原因,我宁愿不要硬编码连接细节。Grails中的SQL连接

当我使用dataSource变量时,它显示为空。我在控制器代码:

import groovy.sql.Sql 

def dataSource 
def sql = Sql.newInstance(dataSource) 
sql.executeInsert("insert into....") 

我的数据源中的配置文件中的代码是:

environments { 
    development { 
     dataSource { 
      dbCreate = "create-drop" 
      url = "jdbc:postgresql:mydev" 
      username = "xxx" 
      password = "xxx" 

正如你可以看到我使用PostgreSQL。我也试过使用默认的grails数据库,结果相同。

任何想法,将不胜感激。

回答

3

您需要在控制器操作之外定义dataSource。否则春天不能为你做所需的依赖注入:

class YouController { 

    def dataSource 

    def yourAction() { 
     def sql = new Sql(dataSource) 
     [..] 
    } 
} 
+0

嗨crudolf谢谢你的答案。它现在通过这个def dataSource行,但是当我设置def sql = new Sql(dataSource)时,我得到一个ClassNotFoundException异常。我也试过def sql = new groovy.sql.Sql(dataSource),但结果相同。有任何想法吗?此致,Marius – marius 2012-03-27 09:14:24

+1

尝试在您的控制器的顶部执行'import groovy.sql.Sql'。理论上它应该工作。你使用的是Grails 1.3.7还是2.0.1?如果没有帮助,请告诉我完整的例外原因。 – Chris 2012-03-27 11:11:14

+0

我正在使用grails 2.0.1。目前我正在导入groovy.sql.Sql。我有一个想法,为什么它不工作,但不知道如何解决它,或者如果它甚至是问题。在我看来,我使用一个标签来渲染一些复选框。在检查/取消选中这些复选框时,我使用AJAX调用将一些参数传递给一个javascript函数,后者又调用控制器,在那里我尝试运行SQL查询的自定义操作。在使用AJAX调用时,是否会丢失我的Grails对象? – marius 2012-03-27 21:39:51