ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

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:先頭である必要があるのかどうかは不明。 → ファイルの先頭じゃなくていいようです。