2012-03-25 30 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