SQLite on JavaFX

hide1080 さんの 『JavaFX 1.2 のローカルストレージを試してみる』 にコメントした話題が少し気になったので週末に試してみた。

今までブログというものをまともに書いたことがなかったが、これを機に自分の覚え書きとして始めてみることにした。

まぁ いつまで続くかわからないが...

今 興味を持っている JavaFX についてなら少しは書き続けられるだろう

本当は英語で書いて JavaFX Blog Contest に参加したいところだが...

余計なこと考えてると確実に続けられなくなるので、まずは日本語で書くとしよう。

で...
前置きはさておき、コメントの話題はというと

 JavaFXSQLite が使えるか

です。

とりあえず、細かいことは抜きにして、結果は...
拍子抜けするぐらいに 簡単に使えた

コーディング以外に やらなければならないことはただ一つ...

 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!

...と標準出力できても何の意味もないので...
以下のような一行コメントアプリケーションを作ってみた。

以下のリンクに配置してあるので 興味があればどうぞ...
もちろん、オレオレ証明書で署名してあるのでセキュリティ警告がでますが...

SQLiteSample

折角なので JavaFX 1.2 で追加されたコントロールを使ってみたが...
hide1080 さんのブログでもコメントしたとおり 日本語が文字化けする不具合がある。
font 属性に Font{} を指定すれば 文字化けが直ることも分かっているが、実は今回利用した ListView には font 属性がない!!
どうにも日本語の文字化けが直らないので 仕方がないので 日本語を入力できないようにしてある。
ちなみに、この文字化けの不具合は Windows 版だけで発生するということが今回新たにわかった。OS X では発生しなかった...

実行すると ホームディレクトリ直下に sample.db という名前でファイルが作成されるので 要らなくなったら自分で削除しておこう。