Groovy で気軽に SQL を投げるスクリプトを書く
Groovy を使って簡単に SQL を投げるスクリプトを書く方法を知ったので書き残しておきます。 この記事のスクリプトは Groovy 2.1.7 で試しました。
Groovy SQL
Groovy には標準の SQL サポートがあるっぽいです。 groovy.sql.Sql
クラス!! 次のドキュメントを読むと良さそうです。
次のように Sql
オブジェクトを作って、簡単に SQL を投げて結果を取得できます。
// 注) このスクリプトを実行するには、MySQL 用の JDBC ドライバ (com.mysql.jdbc.Driver) を含むライブラリをクラスパスに // 含めておく必要がある。 import groovy.sql.Sql def sql = Sql.newInstance("jdbc:mysql://localhost:3306/sample_db", "user", "password", "com.mysql.jdbc.Driver") def minUuid = 0 sql.eachRow("SELECT * FROM sample_table WHERE uuid > ? ORDER BY uuid LIMIT 10", [minUuid]) { println "uuid: ${it.uuid}" }
日本語だと次の記事が参考になります。
Groovy スクリプト上の依存ライブラリ記述
上のサンプルコードのコメントに書いてあるように、Sql
クラスを使う際には DB に対応する JDBC ドライバを用意する必要があります。 よくある方法としては JAR ファイルをダウンロードしてきて CLASSPATH
を通す、という方法ですが、もっと手軽にやりたいですよね。
Groovy には、Maven リポジトリへの依存を CLASSPATH
に簡単に追加する Grape という機能があります。 この機能を使うと、Groovy スクリプトのファイル中に依存ライブラリを記述することができます。 詳細は次のドキュメントをご覧ください。
MySQL 用の JDBC ドライバを Grape の機能で追加する場合は、ファイルの先頭 *1 に次のように記述すればよいようです。
@GrabConfig(systemClassLoader=true) // JDBC ドライバの場合はこれが必要らしい。 @Grab(group='mysql', module='mysql-connector-java', version='5.1.+') // MySQL の JDBC ドライバ。
最終的には
groovy コマンドさえインストールしていれば、次のようなスクリプトを書いて groovy コマンドで実行することで簡単に SQL を投げたりできます! 便利!!
@GrabConfig(systemClassLoader=true) // JDBC ドライバの場合はこれが必要らしい。 @Grab(group='mysql', module='mysql-connector-java', version='5.1.+') // MySQL の JDBC ドライバ。 import groovy.sql.Sql def sql = Sql.newInstance("jdbc:mysql://localhost:3306/sample_db", "user", "password", "com.mysql.jdbc.Driver") def minUuid = 0 sql.eachRow("SELECT * FROM sample_table WHERE uuid > ? ORDER BY uuid LIMIT 10", [minUuid]) { println "uuid: ${it.uuid}" }
*1:先頭である必要があるのかどうかは不明。 → ファイルの先頭じゃなくていいようです。