H2 Databaseとは、Javaプラットフォーム上で動作するリレーショナルデータベースである。
MavenからH2 Databaseを利用できるようにするには、pom.xmlに次の依存関係を追記する。
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
<scope>test</scope>
</dependency>
H2 Databaseには次に示すデータ型がある。
データ型 | マップ |
---|---|
INT | java.lang.Integer |
BOOLEAN | java.lang.Boolean |
TINYINT | java.lang.Byte |
SMALLINT | java.lang.Short |
BIGINT | java.lang.Long |
IDENTITY | java.lang.Long |
DECIMAL | java.math.BigDecimal |
DOUBLE | java.lang.Double |
REAL | java.lang.Float |
TIME | java.sql.Time |
TIME WITH TIME ZONE | java.time.OffsetTime |
DATE | java.sql.Date |
TIMESTAMP | java.sql.Timestamp |
TIMESTAMP WITH TIME ZONE | org.h2.api.TimestampWithTimeZone |
BINARY | byte[] |
OTHER | java.lang.Object |
VARCHAR | java.lang.String |
VARCHAR_IGNORECASE | java.lang.String |
CHAR | java.lang.String |
BLOB | java.sql.Blob |
CLOB | java.sql.Clob |
UUID | java.util.UUID |
ARRAY | java.lang.Object[] |
ENUM | java.lang.Integer |
GEOMETRY | org.locationtech.jts.geom.Geometry |
JSON | byte[] |
INTERVAL | org.h2.api.Interval |
H2 Databaseの組込みモードでは、ローカルのデータベースファイルに直接アクセスする。サービスを公開することはできない。
接続文字列 | 説明 |
---|---|
jdbc:h2:~/test | ユーザのホームディレクトリの'test' |
jdbc:h2:/data/test | /dataディレクトリの'test' |
jdbc:h2:/data/test | 現在の作業ディレクトリ |
H2 Databaseはインメモリモードで動作させることができる。インメモリの場合、データはファイルではなくメモリに保持される。
接続文字列 | 説明 |
---|---|
jdbc:h2:mem:test | 1つのプロセス内の複数の接続 |
jdbc:h2:mem | 匿名プライベートの1つの接続 |
サーバモードの場合、H2 Databaseはデータベースサーバとして動作する。ネットワークを通じて、サービスを外部に公開することができる。
接続文字列 | 説明 |
---|---|
jdbc:h2:tcp://localhost/~/test | ユーザホームディレクトリ |
jdbc:h2:tcp://localhost//data/test | 絶対ディレクトリ |
デフォルトで新しいデータベースが自動的に作成される。
H2 Consoleツールを起動するには、jarファイルをダブルクリックするか、次のうちいずれかを実行する。
java -jar h2*.jar
h2.bat
h2.sh
最後の接続を閉じると、データベースが閉じる。
H2 Databaseでは文字コードとしてUnicode UTF-8が使われる。他の文字コードに変更することはできない。
JDBCを使ってH2 Databaseに接続するサンプルを次に示す。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Example {
static final String JDBC_DRIVER = "org.h2.Driver";
static final String URL = "jdbc:h2:~/test";
static final String USER = "tsuka";
static final String PASS = "";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(URL, USER, PASS);
stmt = conn.createStatement();
// SQL query or update
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
MvnRepository (2021) H2 Database Engine