SQLite on JavaFX
hide1080 さんの 『JavaFX 1.2 のローカルストレージを試してみる』 にコメントした話題が少し気になったので週末に試してみた。
今までブログというものをまともに書いたことがなかったが、これを機に自分の覚え書きとして始めてみることにした。
まぁ いつまで続くかわからないが...
今 興味を持っている JavaFX についてなら少しは書き続けられるだろう
本当は英語で書いて JavaFX Blog Contest に参加したいところだが...
余計なこと考えてると確実に続けられなくなるので、まずは日本語で書くとしよう。
で...
前置きはさておき、コメントの話題はというと
JavaFX で SQLite が使えるか
です。
とりあえず、細かいことは抜きにして、結果は...
拍子抜けするぐらいに 簡単に使えた
コーディング以外に やらなければならないことはただ一つ...
JDBCドライバ をクラスパスに入れる
だけ...
あとは コーディング...
以下のサンプルは メッセージをDBに保存して、保存された全てのメッセージを標準出力する。
...と言っても メッセージは "Hellow World!" だけ...
ちょっと寂しいので タイムスタンプも保存して出力してみた。
もちろん サンプルなので 例外処理は一切 無視。
import java.lang.Class; import java.sql.*; import java.text.DateFormat; import javafx.date.DateTime; def fmt = DateFormat.getDateTimeInstance(); Class.forName("org.sqlite.JDBC"); var con = DriverManager.getConnection("jdbc:sqlite:{FX.getProperty("javafx.user.home")}/sample.db"); // Create Table. var s = con.createStatement(); s.executeUpdate("create table if not exists comments (id integer primary key, message text, created_at numeric);"); // Insert comment. var ps = con.prepareStatement("insert into comments (message, created_at) values (?, ?);"); ps.setString(1, "Hello World!"); ps.setLong(2, DateTime{}.instant); ps.executeUpdate(); ps.close(); // Select comments. var rs = s.executeQuery("select * from comments;"); while (rs.next()) { println("[{fmt.format(rs.getLong('created_at'))}] {rs.getString('message')}"); } s.close(); rs.close(); con.close();
実行結果:
[2009/06/06 18:23:24] Hello World! [2009/06/06 18:24:14] Hello World! [2009/06/06 18:39:01] Hello World! [2009/06/06 18:39:05] Hello World! [2009/06/06 18:39:27] Hello World!
...と標準出力できても何の意味もないので...
以下のような一行コメントアプリケーションを作ってみた。
以下のリンクに配置してあるので 興味があればどうぞ...
もちろん、オレオレ証明書で署名してあるのでセキュリティ警告がでますが...
折角なので JavaFX 1.2 で追加されたコントロールを使ってみたが...
hide1080 さんのブログでもコメントしたとおり 日本語が文字化けする不具合がある。
font 属性に Font{} を指定すれば 文字化けが直ることも分かっているが、実は今回利用した ListView には font 属性がない!!
どうにも日本語の文字化けが直らないので 仕方がないので 日本語を入力できないようにしてある。
ちなみに、この文字化けの不具合は Windows 版だけで発生するということが今回新たにわかった。OS X では発生しなかった...
実行すると ホームディレクトリ直下に sample.db という名前でファイルが作成されるので 要らなくなったら自分で削除しておこう。