NetBeansでSQLite3 JDBC Driverを使ってみる
SQLite3 JDBC Driver を使ったアプリケーションを作る前準備として NetBeans IDE 6.1 Beta 上で SQLite3 を使えるようにしてみます。
- NetBeans IDE 6.1 Beta の Java SE パックをダウンロードしてインストールします。
JDK 6 は事前にインストールしておく必要があります。 - sqlite3jdbc-0.0.6.zip をダウンロードして任意のフォルダに展開します。
ここでは C:\Java\sqlite3jdbc に展開します。 - sqlite3jni-0.0.6-win32.zip をダウンロードして任意のフォルダに展開します。
ここでは C:\Java\sqlite3jdbc\win32 に展開します。 - 「C:\Java\sqlite3jdbc\win32」を環境変数「PATH」に追加します。
- NetBeans を起動します。
- 「CTRL+5」で「Services」ウィンドウに切り替えます。
- 「Drivers」→右クリック→「New Driver...」をクリック。
- 「Driver File(s)」に「C:\Java\sqlite3jdbc\sqlite3.jar」を追加して「Find」ボタンをクリック。「Name」に「SQLite3」と入力して「OK」ボタンをクリックし、SQLite3 JDBC Driver を登録します。
- 「SQLite3」→右クリック→「Connect Using...」をクリック。
- 「Database URL」に「jdbc:sqlite:mem:」と入力して「OK」ボタンをクリック。
- ツリーに追加された「jdbc:sqlite:mem: [on main]」にテーブルを作成します。
「Tables」→右クリック→「Create Table...」をクリック。
「SAMPLE」テーブルを作ってみます。
- ツリーに「SAMPLE」テーブルが追加されました。
- テーブルの中身を確認してみます。
「SAMPLE」→右クリック→「View Data...」をクリック。
「Output」パネルにエラーが出力され、テーブルの中身は確認できません…orz
原因は SQLite v3.3.5 では sqlite3_step() を呼び出さないと sqlite3_column_type() でカラム型を取得できないためです。次のバージョン(0.0.7)では例外を投げないように変更する予定です。
- 気を取り直して、SQLite3 JDBC Driver ver 0.0.7(開発版)をダウンロードして C:\Java\sqlite3jdbc に展開します。
「sqlite3jdbc-0.0.7-dev.zip」をダウンロード - NetBeans を再起動して、再度テーブルの中身を確認してみます。
無事、テーブルの中身が表示されました(空っぽですが)。 - 次はレコードを登録してみます。
「Tables」→右クリック→「Execute Command...」をクリック。
「INSERT INTO main.SAMPLE VALUES(1, 'ねこび~ん', 123.456789)」と入力して「CTRL+Shift+E」で SQL を実行します。
- 再度テーブルの中身を確認してみます。
無事、登録されているレコードが確認できました。 - 使い終わったら DB 接続を閉じましょう。
「jdbc:sqlite:mem: [on main]」→右クリック→「Disconnect」をクリック…すると NetBeans がクラッシュします…orz
原因は SQLite v3.3.5 では sqlite3_open() したスレッドとは異なるスレッドで sqlite3_close() を呼び出すことができないためです。
(リリースノートには v3.3.1 で異なるスレッドでの sqlite3_close() 呼び出しに対応したとあるんですが…)
※ビルドオプションに「SQLITE_ENABLE_MEMORY_MANAGEMENT」を追加しているのが原因でした…orz
※「SQLITE_ENABLE_MEMORY_MANAGEMENT」は組み込みデバイスなどのメモリが厳しい環境のみ指定するのが正しいようです。
試しに v3.5.6 で JNI ライブラリをビルドしたところ NetBeans がクラッシュしなくなったので SQLite のバージョンをあげれば解決するはずです。
「sqlite3jni-0.0.6-win32-sqlite-3.5.6.zip」をダウンロード
NetBeans で SQLite3 を使ったみた感想は「ちゃんと DatabaseMetaData を実装した甲斐があったなぁ…」でした![]()
| 固定リンク | コメント (2) | トラックバック (0)

最近のコメント