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(); } } }