読者です 読者をやめる 読者になる 読者になる

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

Groovyメモ(TypeCheckedでSql.eachRow)

Groovyは名前からしてRubyに文法似ているのかと思いましたがそうでもないですね。やっぱりJavaベースでRubyにインスパイアされた記法ができるといった感じです。

さて新しい言語はいろいろ学びが多いですが今日特にはまったこと。

@TypeCheckedアノテーションをつけると型チェックがされるようになります。@CompileStaticでも同様です。後者はより静的にコンパイルされるようです。

GroovyではSQLを実行するのも簡単でselectしたものを1行ずつ処理するにはSqlクラスのeachRowメソッドを使います。SQLを引数で渡して実行して後続のクロージャで1行ずつ処理されます。クロージャ内の変数itに結果の1行分が入ってきます。itはクロージャに渡る変数が1個のときに変数名を省略でき、そのときのデフォルトの変数です。

sql.eachRow("select name from products") {
    println it.name
}

これが、TypeCheckedだとコンパイルエラーになりました。itがObject型と認識されてしまい.nameのところでエラーになります。キャストを試みたりいろいろしましたが結果以下のようにしたらできました。

List rows = sql.rows("select name from products")
rows.each {
    println it.name
}

sql.rowsはSQLの実行結果をまとめてListにして返すものです。こうしてワンクッション置いたらできました。なおitの型はGroovyRowResultというものでした。

Groovyの情報は検索するとわりといろいろ出てきますが今回のような深い情報はあまりないですね。おためし程度で使っているケースが多いと思われます。