Skip to end of metadata
Go to start of metadata

Groovy SQL


このセクションでは、GroovySQL article, by Andrew Glover を一部引用しています。

また、Groovyのstringリテラルの中に変数を取り込む機能を使っています。
例:

  このようにGroovyは、${}の中のものを評価します(groovy expression)。この機能を以下では、色々な所で使ってます。

簡単なクエリ(照会)


最初のGroove SQL のコードは3行です。

最初の行はJavaのimport文です。これでGroovyはSqlオブジェクトのフルネームが分かります。 2行目は、SQLデータベースへの新しいコネクションを生成し、変数sqlにセットします。ここでは、データベースがMS SQL ServerでjTDS jdbc ドライバーを使っていますので username,password を含むすべてのパラメーターを実際に使うデータベースに合わせてください。
最後の行では、Sql の eachRow メソッドを2つの引数で呼びます(1番目はクエリストリング、2番目は、2つの値を プリント するクロージャー)
クロージャーの中で、"it"(result set の行を表す)のフィールドは2つの方法で指定されてます。 最初は、単純なフィールド名(カラム名)指定で、もう一つは、 フィールド名(カラム名)指定ですが上記のGroovy expressionを経由しています。
実行結果: 

DBから先頭行の値を取り出す


DBの先頭行のカラムの値を知りたいだけなら:

複雑なクエリー(更新)


これまでのサンプルは、簡単なもの(照会)でしたけど、GroovySql は、insert,update,delete  といったクエリでも大丈夫です。 これらの種類のクエリでは、クロージャーを必要としない時が多いでしょうから、GroovySqlは、execute と executeUpdate メソッドを用意しています。 通常のJDBCのexecute と executeUpdateメソッドを思い浮かべますね。
  insertのサンプル: peopleというテーブルに ${}を使って値の変数を置換し 新しい行を insert するサンプルです。



このサンプルでは、string型データをシングルクウォートしています。 これは、いいやり方ではないですね(そのデータがシングルクウォートを含んでいた場合を考えて見てください) 以下のようにprepared statementsを使いましょう。


insert したいデータは、配列のitemとしてexecuteメソッドの2番目の引数になり、1番目の引数のinsert ステートメントの"?"達は、その配列の値でそれぞれ置換されます。 Updateも同様ですが、ここでは、executeUpdateメソッドを使ってます。 executeUpdate メソッドでも"?"を置換するリストを引数にしています。


deleteもクエリ文が違うだけで同じです:

  • No labels