とりあえず日本語いまのところおっけー

Groovyについていろいろ調べていくうちにJDK6.0とか7.0とかでJavaの標準(J2SEかな?)に統合されるかもしれないという期待の情報とともに,「今はまだちょっと・・・」という意見もちらほら見ることができた.

Eclipseプラグインも使ってみたがまだちょっと使い勝手が良くないし,コマンドラインで実行した際のエラーメッセージもGroovyが変換したJavaのコードに対してのエラーのままだし,デバッグ効率が悪いことが既に予想される.つまり今すぐ生産性があがるのかどうか疑問な言語というわけだ.

しかし私の現在のSpecializationがJDBCドライバ実装MySQL Connector/Jであることも考慮すると,この次世代のJava標準スクリプト言語の特にデータベースとの連携の部分については見ておいた方が良いし,またこの分野を受け持つ技術者の一人として見ておくべきかと思う.(平たく言うとここに興味が湧いただけです,はいw)

そういうわけでGroovyの公式サイトに紹介されたDB接続サンプルコード(http://groovy.codehaus.org/Groovy+SQL)を真似しつつ,そしてGroovyのJavaDochttp://groovy.codehaus.org/apidocs/index.html)を見つつ,例のいつもの飽きるほどやっているやつを試してみた.

import java.util.Properties
import groovy.sql.Sql

driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/test"
props = new Properties()
props.put("user", "")
props.put("password", "")
props.put("useUnicode", "true")
props.put("characterEncoding", "WINDOWS-31J")

sql = Sql.newInstance(url, props, driver)

query1 = "DROP TABLE IF EXISTS t1"
query2 = "CREATE TABLE t1 (c1 char(4)) 
  ENGINE = MyISAM, DEFAULT CHARACTER SET = cp932"
query3 = "INSERT INTO t1 VALUES ('㈱表参道')"
query4 = "SELECT * FROM t1"

sql.execute(query1)
sql.execute(query2)
sql.execute(query3)
sql.eachRow(query4) { 
    println "${it.c1}" 
}

sql.close()

Javaで書いた時の「例のいつもの飽きるほど書いているコード」よりは書くボリュームとかが減った感じがする.PropertiesオブジェクトをそのままJDBCドライバに渡してくれるので,JDBCドライバの機能はフルに利用できると思う.APIの高級化については全般的にはそれほど行われていないが,ResultSetの代わりに"it"という変数でどうやら暗黙的に受け取れるらしい.詳細は未調査だがこれは面白い.

格納している文字列「㈱表参道」はNEC拡張文字である「かっこ株」と5Cを含む文字である「表」を含んだ文字列だ.とりあえず最初のテストとしてはこれが通るか否かでいいだろう.結果は以下.

prompt>groovy JDBCTest.groovy
㈱表参道
prompt>

ちなみにテスト環境は,

  • Windows2000Pro
  • Sun JDK 1.4.2_08
  • MySQL 5.0.4beta
  • Connector/J 3.1系 nightlybuild 20050528
  • Groovy 1.0-jsr-01

だ.



蛇足だが,Connector/J 3.1のnightlybuild 20050528には例のEUC_JP_Solarisパッチが含まれている.某氏は既に試されたとの話であったが,他にもご興味の方がいらっしゃいましたらお試しアレ.