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*.jarh2.bath2.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