Skip to content

h2

アプリケーション組み込みのデータベースとしては h2 を使うケースがあります。 h2 は Java で書かれたデータベースで、JDBC でアクセスできます。

ただし、最近ではウェブアプリケーションのテストでは h2 でテストするのではなく testcontainers で Docker 上にデータベースを立てることが多いです。

他のデータベースとの比較

http://www.h2database.com/html/features.html#comparison

このへん見てください。

URI の指定の仕方を教えて下さい

以下のようにします。インメモリDBが便利です。

Embedded
    jdbc:h2:~/test 'test' in the user home directory
    jdbc:h2:/data/test 'test' in the directory /data
    jdbc:h2:test in the current(!) working directory
In-Memory
    jdbc:h2:mem:test multiple connections in one process
    jdbc:h2:mem: unnamed private; one connection
Server Mode
    jdbc:h2:tcp://localhost/~/test user home dir
    jdbc:h2:tcp://localhost//data/test absolute dir
    Server start:java -cp *.jar org.h2.tools.Server

Settings
    jdbc:h2:..;MODE=MySQL compatibility (or HSQLDB,...)
    jdbc:h2:..;TRACE_LEVEL_FILE=3 log to *.trace.db
    jdbc:h2:..;TRACE_LEVEL_SYSTEM_OUT=3 log to STDOUT

AUTO_INCREMENT 指定ってどうやるんですか?

以下のように auto_increment を指定すればよいです。

create table foo (id bigint auto_increment primary key); 

FAQ

Java DB ってどうなんですか?

Java DB は Apache Derby が実体です。JDK に組み込まれています。 しかしパフォーマンスはあまり良くないようです。

https://ja.wikipedia.org/wiki/Apache_Derby

HSQLDB ってどうなんですか?

HSQLDB の作者が後継として作ってるのが h2 なので h2 のほうが良さそう。

使い慣れた SQLite 使いたいのですが

使い慣れた SQLite を利用したいという気持ちもわかります。 JDBC Driver が存在しているので、こちら利用すれば利用可能です。

https://bitbucket.org/xerial/sqlite-jdbc/downloads

ただ、できればすべて Java で書かれている h2 のほうが良い気はします。