H2にさわる

H2 Database EngineはJavaで記述されたSQLデータベースエンジンで、
もともとHypersonic SQL(今のHSQLDB)の主要開発者である、Thomas Mueller氏によって開発された。


他のデータベースと比較すると、組み込み用途にもサーバ用途にも使うことができる上、ファイルサイズがわずか1MBといったかなり軽量なデータベースである。
しかし、軽量だからといってなめてはいけない!
ODBC、ビュー、トリガー、トランザクションクラスタリングなどをサポートしている上、管理用のWebコンソールも用意されている。
そして何よりパフォーマンスにも優れているのだ。


インストールについても面倒な設定も不要で非常に簡単だった。


まず、ZipファイルをH2 Database Engineからダウンロードして、解凍する。
そして、binフォルダに格納されているh2.batを実行すると、管理用のWebコンソールが起動し、データベースが使用可能になる。
超簡単!


テーブルの作成や、データの登録、検索は、Webコンソールから実行できる。

CREATE TABLE TEST(
	ID 		IDENTITY 		PRIMARY KEY,
	CH		CHAR(10),
	VC 		VARCHAR(20),
	DT 		DATE,
	TS 		TIMESTAMP,
	BL 		BOOLEAN 
);


INSERT INTO TEST (CH,VC,DT,TS,BL)
VALUES ('CHAR', 'VARCHAR', '2007-03-09', '2007-03-09 03:30:40', TRUE);

SELECT * FROM TEST;

JDBCで接続する場合は、JDBCドライバーがh2.jarに梱包されている為、クラスパスを通し、org.h2.Driverをドライバーに指定する。
あと、URLは、用途により次のように指定する。

用途 URL
サーバ jdbc:h2:tcp://localhost:9092/データベース名
組込み jdbc:h2:データベース名
package sample.h2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;

public class JDBCLearning {

	public static void main(String[] args) {
		try {
			// ドライバクラスをロード
			Class.forName("org.h2.Driver");

			// データベースへ接続
			Connection con = 
				DriverManager.getConnection(
					"jdbc:h2:tcp://localhost/test", "sa", "");
			
			// プリペアドステートメントオブジェクトを生成
			PreparedStatement pstmt = 
				con.prepareStatement("INSERT INTO TEST (CH,VC,DT,TS,BL) " +
					"VALUES (?, ?, ?, ?, ?);");

			// パラメータを設定
			pstmt.setObject(1, "CHAR2");
			pstmt.setObject(2, "VARCHAR2");
			pstmt.setObject(3, new Date());
			pstmt.setObject(4, new Date());
			pstmt.setObject(5, Boolean.FALSE);
			
			// クエリーを実行してレコードを登録
			int result = pstmt.executeUpdate();
			System.out.println("件数:" + result);
			
			// ステートメントオブジェクトを生成
			Statement stmt = con.createStatement();
			String sql = "SELECT * FROM TEST";
			// クエリーを実行して結果セットを取得
			ResultSet rs = stmt.executeQuery(sql);
			// 検索された行数分ループ
			while (rs.next()) {
				System.out.println("ID: " + rs.getLong     ("ID"));
				System.out.println("CH: " + rs.getString   ("CH"));
				System.out.println("VC: " + rs.getString   ("VC"));
				System.out.println("DT: " + rs.getDate     ("DT"));
				System.out.println("TS: " + rs.getTimestamp("TS"));
				System.out.println("BL: " + rs.getBoolean  ("BL"));
			}
			// データベースから切断
			stmt.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}