ラベル sqlite の投稿を表示しています。 すべての投稿を表示
ラベル sqlite の投稿を表示しています。 すべての投稿を表示

2008年12月1日月曜日

SQLite JDBC 3.6.6.2 リリース

SQLite JDBC 3.6.6.2をreleaseしました。

もともとのSQLite 3.6.6に混入されたバグの修正版です。


2008年10月21日火曜日

[SQLite JDBC] Javaで始めるSQLiteデータベース入門

SQLiteデータベースは、Cで書かれた軽量データベースです。「軽量」というのは2つの意味があって、全体のコード数が10万行程度という点(PostgreSQLは100万行に近づいています)と、データベースを保存するファイルが1つに納まっているのがSQLiteの特徴です。他のシステムだと、複数のデータベース用のファイルがあって管理が面倒なのですが、SQLiteのデータベースはファイル1つで、しかもOS互換フォーマットで保存されているので、簡単にOSをまたがったデータベースのコピーを作成することができます。

そもそもリレーショナルデータベース(日本語では関係データベースと訳すことが多いです)って何?という方は、初心者向けに用意した以下の講義資料を参考にしてください。
Javaでデータベースアプリケーションを作成するには、JDBC (Java Database Connection)というAPIを使います。ただし、データベースを使うには、まずシステム側にデータベースシステムをインストールする必要があり、ここが慣れた人でもデータベースシステム(英語では、Database Management System: DBMSと言います)の設定でつまづいたり、面倒なことが多いのが難点でした。

このような問題を解決するために、SQLiteの軽量さを生かしたJava用のライブラリ(jarファイル)を作成しました。
このSQLite JDBC Driverでは、Mac OS X, Windows, Linux (i386, amd64)などよく使われるOSでSQLiteをインストールなしで動作させるために、それぞれのOSでコンパイルしたSQLiteのバイナリをjarファイルの中に埋め込んであります。これは、SQLiteが軽量だからなせる技です。プログラムの実行時に、自動的にjarファイルの中から、OSに応じたSQLiteのバイナリを取り出し、Java側でロードして使えるようにしています。

もし、少々特殊なOSや、CPUを使っていても安心です。SQLiteのCのコードを完全にJavaで動作するように置き換えたpure java版のSQLiteもライブラリに含めているので、上記以外のOSでもきちんと動作します(CをJavaコードに書き換えるのに少々無理があるので、動作は遅くなりますが)

JavaでSQLiteデータベースを使うには次の手順で行います:
  1. sqlite-jdbc-(version).jar をここからダウンロードします。2008年10月現在の最新版は3.6.4です。(Maven central repoのミラーからもダウンロードできます。)
  2. 下にあるサンプルプログラム(Sample.java)は、JDBCを通してデータベースの作成、検索をする例です。これをコンパイルします。
  3. Javaを実行するときに、上記のJARファイルを以下のようにクラスパスに含めます。
    java -classpath ".:sqlite-jdbc-(VERSION).jar" Sample
  4. これだけでJavaでDBMSが使えるようになります。お手軽!
Sample.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class Sample
{
public static void main(String[] args) throws ClassNotFoundException
{
// load the sqlite-JDBC driver using the current class loader
Class.forName("org.sqlite.JDBC");

Connection connection = null;
try
{
// create a database connection
connection = DriverManager.getConnection("jdbc:sqlite:sample.db");
Statement statement = connection.createStatement();
statement.setQueryTimeout(30); // set timeout to 30 sec.

statement.executeUpdate("drop table if exists person");
statement.executeUpdate("create table person (id integer, name string)");
statement.executeUpdate("insert into person values(1, 'leo')");
statement.executeUpdate("insert into person values(2, 'yui')");
ResultSet rs = statement.executeQuery("select * from person");
while(rs.next())
{
// read the result set
System.out.println("name = " + rs.getString("name"));
System.out.println("id = " + rs.getInt("id"));
}
}
catch(SQLException e)
{
// if the error message is "out of memory",
// it probably means no database file is found
System.err.println(e.getMessage());
}
finally
{
try
{
if(connection != null)
connection.close();
}
catch(SQLException e)
{
// connection close failed.
System.err.println(e);
}
}
}
}

やや高度な内容ですが、MavenをJavaの開発に使っている人は、mavenのcentral repositoryにsyncされているこのSQLite JDBCライブラリを使うことができます。pom.xmlファイルに以下のような記述をするだけで自動的にダウンロードされます。
<dependencies>
<dependency>
<groupid>org.xerial</groupid>
<artifactid>sqlite-jdbc</artifactid>
<version>3.6.4</version>
</dependency>
</dependencies>

SQLiteではファイルにデータベースを保存せずにメモリーの上でデータベースを構築することもできるので、データベースのテスト用にも最適です。

2007年12月31日月曜日

SQLite JDBC Driverをv038にupgrade

Leo's Chronicle: SQLite JDBC Driver

本家のsqlitejdbcドライバーがupdateされていたので、こちらもv038 (sqlite3.5.4)に対応させました。
http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC

ちょっとした改善点は、jarファイルから抽出した*.dll等のファイルを、目立たない場所に置くようにした、という点。SWT3.3から導入されたテクニックと一緒ですね。Win, Linux, Macに完全対応なので、動作が極端に遅くなるPure Java版を敢えて使う必要がなくなると思います。

ライセンスもApache License 2.0に対応させました。ビジネス、私用、共に自由に使えます。時間ができたときに、本家を完全に取り込むとよいかなぁ。僕的に、これはあまり優先度は高くないけれど。

OSごとにpackageを作って、v037, v038を別々にreleaseする作業って、mavenを使っていると、わりと楽にできます。ただ、いつも思うことですが、必ずしも「便利になる」イコール「楽になる」ということではないんですよね。

便利になるということは、仕事の敷居が低くなるということ。つまり、できることが増えるわけえす。そうすると、今までやろうともしなかったことをすることになるので、仕事量はあまり変わりません。mavenの仕組みを学んで、慣れるまでに、相当の時間を費やしているので、結果として、まったく楽にはなっていないです。

次にどれだけプロジェクトを作るか次第で、ここで払った勉強コストが有益かどうかが変わります。たぶんプロジェクトは、今後どんどん増えていくのですが、そうとわかっていても、苦労するのは今なわけですから、長期的な価値判断に基づいて行動するのは、人間にはなかなか難しいものですね。

「喉もと過ぎれば熱さを忘れる」 ということわざにもありますが、後になって、初期の投資がどれだけ大変だったか評価するのも難しい。さてさて。

2007年10月15日月曜日

SQLite JDBC Driver

SQLiteのデータベースをJavaから扱うのは、意外と不便でした。

Pure-Java JDBC driverもあって、それはjarファイルをclasspathに含めるだけで良かったのですが、sqliteのコードを完全にJavaに変換して作成されているので、クエリの種類によっては動作が極端に遅くなることもありました。

sqliteをdllなどにして、C APIをJNDI経由で操作する、native版のライブラリもありますが、dllをインストールしたり、パスの設定しなくてはいけなかったりと、いろいろ面倒でした。

そこで、dllもろともを一つのjarの中に押し込めたまま使えるようにしたSQLiteのJDBCドライバを作成しました。
http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC

dllを自動的にjarの中から取り出してくれて、パスの設定なども行ってくれます。これでJavaから、sqliteを気楽に使えるようになりました。

ぜひ、使ってみてください。

License

Creative Commons LicenseLeo's Chronicle by Taro L. Saito is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.