HSQLDB Hello World , 簡単に使えるし パスワードも設定できる date:2010-09-21

{link:http://hsqldb.org/} を groovy から使ってみたのでメモ。

サーバの用意

hsqldb.jar をダウンロードして以下のように実行すればよいのですが...


java -Xms12m -Xmx24m \
    -cp $dbhome/lib/hsqldb.jar org.hsqldb.server.Server
    --database.0 file:/var/tmp/hsqldb/mydb --dbname.0 xdb > /dev/null 2>&1 &

hsqldb.jar ダウンロードする手間をかけないで、以下のように
{link:http://mvnrepository.com/artifact/org.hsqldb/hsqldb/2.0.0}を使って
@Grabだけで済ます方法があります。

hsqldb_server.groovy


@Grab(group='org.hsqldb', module='hsqldb', version='2.0.0')

myargs = ['--database.0','file:/var/tmp/hsqldb/mydb','--dbname.0','xdb'] as String[]
org.hsqldb.server.Server.main( myargs )

実行


$ groovy hsqldb_server.groovy 
[Server@1140709]: [Thread[main,5,main]]: checkRunning(false) entered
...

クライアント

事前に hsqldb.jarを入手して、~/.groovy/lib/hsqldb.jar に配置しておく必要あり。
Grab で済ませる場合は... {link:http://d.hatena.ne.jp/uokumura/20101210/1291963162} を参考に...

その1 テーブル作成とデータ追加するコード test1.groovy


import groovy.sql.Sql

db = Sql.newInstance('jdbc:hsqldb:hsql://localhost:9001/xdb', 'sa', '') 

db.execute('create table word(id varchar(255),name varchar(255))')
db.execute("insert into word(id,name) values(?,?)",['1','Hello'])
db.execute("insert into word(id,name) values(?,?)",['2','World'])

db.close()

その2: 先ほど追加したデータを取り出してみる test2.groovy


import groovy.sql.Sql

db = Sql.newInstance('jdbc:hsqldb:hsql://localhost:9001/xdb(, 'sa', '') 
db.eachRow('select * from word'){ println it }

db.close()

その3: パスワードを ’hogehoge’ に設定してみる


import groovy.sql.Sql

oldpass = ''
newpass = 'hogehoge'

sql = Sql.newInstance('jdbc:hsqldb:hsql://localhost:9001/xdb', 'sa', oldpass)
sql.execute( "set password \"${newpass}\"".toString() )
sql.close()

パスワードが効いているか確認するため再度 test2.groovy を実行


$ groovy test2
Caught: java.sql.SQLInvalidAuthorizationSpecException: invalid authorization specification
	at test2.run(test2.groovy:4)

パスワード 'hogehoge' に変更して実行してみる。


import groovy.sql.Sql

db = Sql.newInstance('jdbc:hsqldb:hsql://localhost:9001/xdb', 'sa', 'hogehoge') 
db.eachRow('select * from word'){ println it }
db.close()

今度はうまくいきました。

その4 shutdown コマンドを発行して終了します


import groovy.sql.Sql

sql = Sql.newInstance('jdbc:hsqldb:hsql://localhost:9001/xdb', 'sa', 'hogehoge')
sql.execute( "shutdown".toString() )
sql.close()

HSQLDBは shutdown コマンドを使って終了しないとデータ変更結果が保存されないことがあるので注意が必要です。