JavaでSQLiteを使ってみた

 SQLiteというDBMSがある。とにかく、軽さが売りのデータベースらしい。
単体の超軽量のexeで動くので、おもちゃのようだが、トランザクションのロールバック、コミットなどができるという優れものだそうな。
そして、PHPなどから使えるし、ODBC、JDBCドライバもあるとのことで、試してみた。
が、とにかく、日本語の資料が少ない。英語が多いのは仕方ないにしても、中国語、ドイツ語が目立つのはどういうことだ? 八重洲ブックセンターでさえ、専門書の在庫は一冊のみ・・・
まぁ、これはその記録である。いつものごとく、内容は無保証。しかし、どこかの誰かがこれを参考にしてドツボから抜け出せれば幸い。

目標:JAVAでSQLite+JDBCドライバを使い、HelloWorldをつくる。

1)SQLiteの準備

まずはhttp://www.sqlite.org/download.htmlから本体をダウンロードする。
バージョン3.xは、JDBCドライバが対応しているのかあやしいので、2.xを落とす。
それを解凍し、C:\の直下にsqliteの名前でフォルダを作成してsqlite.exeを配置する。
そして、コマンドプロンプトで
C:\>cd C:\sqlite
C:\sqlite>sqlite testdatabase
とすると、
SQLite version 2.8.17
Enter “.help” for instructions
と表示され、データベースに入れる。そして、以下のようなコマンドでテーブルをつくる。
sqlite> create table testtable(
…> col1 int primary key,
…> col2 char(128),
…> col3 char(128)
…> );
では、テーブルができてるか、確認。
sqlite> .tables
testtable
うん。確かにできてる。では、データのINSERT。
sqlite> insert into testtable values(1,’Hello’,'World’);
ちゃんとINSERTされたか、確認のためにSELECTしてみる。
sqlite> select col1, col2, col3 from testtable;
1|Hello|World
OKのようなので、SQLiteから抜ける。
sqlite> .quit
すると、C:\sqliteにtestdatabaseというDBのファイルができてる。

2)Java+SQLite+JDBCドライバでHelloWorld!

実は、バージョン間の互換性などがいろいろあるらしく、たかがHelloWorldとはいえ、意外と時間かかった。
まず、JDBCドライバをhttp://www.ch-werner.de/javasqlite/javasqlite-20050608-win32.zipからダウンロードしたが、うまく動かなかった(まぁ、本来は自分の環境でコンパイルしろということだろうが)ので、http://www.itwriting.com/sqlite_jni_win.zipからダウンロードして解凍する。
このドライバは、J2SEの5.0/1.5でもソースからコンパイルすれば動くらしいが、未確認。なので、J2SE1.4.2を使った。

JDKをインストールしたディレクトリは、C:\j2sdk1.4.2_12\jre\bin。ここがJAVA_HOME、そして、%JAVA_HOME%\binがPATHに設定されていることを確認して、ドライバを配置する。sqlite_jni.dllは、%JAVA_HOME%\jre\binに、sqlite.jarは、%JAVA_HOME%\jre\lib\extにコピー。

そして、いよいよ、Javaのプログラム。以下のソースをSQLiteHello.javaとして保存する。

——————– SQLiteHello.java ——————–

import java.sql.*;
import SQLite.*;

public class SQLiteHello {
public static void main(String[] args){
try {
Class.forName(“SQLite.JDBCDriver”);
Connection c = DriverManager.getConnection(“jdbc:sqlite:/c:/sqlite/testdatabase”);
//これを入れない場合は、コミットしなくてもコネクションを切れば自動でコミットされるそうな。
c.setAutoCommit(false);

Statement st = c.createStatement();
//INSERTなどのクエリを実行する場合は、こんなふうに。
//int rc = st.executeUpdate( “insert into testtable values(2,’Hello’,'World’)” );

ResultSet rs = st.executeQuery( “select col1, col2, col3 from testtable” );
while ( rs.next() ) {
int i = rs.getInt(1);
String s1 = rs.getString(2);
String s2 = rs.getString(3);
System.out.println( i + ” :” + s1 + s2 );
}
rs.close();
st.close();
c.commit();
c.close();
}catch(java.lang.Exception e){
e.printStackTrace();
System.exit(0);
}
}
}

—————————————-

これを以下のコマンドでコンパイルする。

C:\sqlite>javac -classpath “.;C:\j2sdk1.4.2_12\jre\lib;C:\j2sdk1.4.2_12\jre\lib\ext\sqlite.jar” SQLiteHello.java

そして、以下のコマンドで実行する。

C:\sqlite>java -classpath “.;C:\j2sdk1.4.2_12\jre\lib;C:\j2sdk1.4.2_12\jre\lib\ext\sqlite.jar” SQLiteHello

結果は、こんな感じ。

1 :HelloWorld

どうしても動かない場合は、http://www.ch-werner.de/sqliteodbc/からODBCドライバをダウンロードすれば、どうにでもなる・・・はず。

2 Comments to “JavaでSQLiteを使ってみた”

  1. By 池田憲司, 2006/07/24 @ 00:00

    > どこかの誰かがこれを参考にしてドツボから抜け出せれば幸い。

    2時間程悩んでいたところ、お陰様で助かりました。
    ありがとうございます。

  2. By 杉蔵, 2006/07/25 @ 00:00

    >池田さま

    わざわざコメントありがとうございます。
    仕事柄、私も日頃からあちこちの個人サイトに助けられていますので。
    お役に立てて幸いです。

この投稿へのコメントの RSS フィード。 TrackBack URI

Leave a Reply