2012-03-25 5 views
2

私のアプリケーションでは、純粋なSQLを使いたい場所がいくつかあります。 Sql.newInstanceで接続の詳細をハードコードすると、正常に動作します。明らかな理由から、私は接続の詳細をハードコードしたくないと思います。GrailsでのSQL接続

dataSource変数を使用すると、nullになります。コントローラでの私のコードは次のとおりです。データソース設定ファイルの

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)を試しましたが、同じ結果です。何か案は? Regires、Marius – marius

+1

あなたのコントローラの上に 'import groovy.sql.Sql'を実行しようとします。理論的にはうまくいくはずです。 grails 1.3.7または2.0.1を使用していますか?それが助けにならないなら、完全な例外理由を教えてください。 – Chris

+0

私はgrails 2.0.1を使用しています。現在私はgroovy.sql.Sqlをインポートしています。私はなぜそれが動作していないアイデアを持っていますが、それを修正する方法がわからない、またはそれが問題であれば。私の見解では、タグを使っていくつかのチェックボックスを描画しています。これらのチェックボックスをオン/オフにするには、AJAX呼び出しを使用してJavaScript関数にパラメータを渡します。この関数は、SQLクエリを実行しようとするカスタムアクションがあるコントローラを呼び出します。 AJAXコールを使用しているときにgrailsオブジェクトを失うことはありますか? – marius