java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

H2DataBaseを使ってみる

投稿日:

最終更新日:2016年09月27日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

今回はH2DataBaseを使ってテーブルから一覧を取得してみました。

H2DataBaseはJavaで作られたデータベースだそうです。ダウンロードしてインストールしました。起動は「すべてのアプリ」メニューに登録された専用のショートカットを使います。ブラウザが起動してデータベースに接続できます。DBの操作はブラウザ上で行うことができます。

インストールしたフォルダにはjarファイルが一つ用意されていて、Java側から接続するときに使います。

今回はH2DataBaseに接続してSELECT文を発行するということを行いました。

テーブルを用意

データベース側には「jdbc:h2:~/test」に接続し、SAMPLE_USERというテーブルを作成しました。「~」は個人のホームディレクトリを表すようです。windowsの場合で「user」というユーザー名の場合、「C:\Users\user」フォルダにtest.mv.dbファイルができていると思います。これがデータベースのファイルです。

以下はテーブルの内容です。

カラム名 not null制約 primary key
ID CHAR(10) あり
NAME VARCHAR(255) あり
AGE INT あり

対応するCREATE文は以下です。

CREATE文

CREATE TABLE SAMPLE_USER (
  ID CHAR(10) not null primary key,
  NAME VARCHAR(255) not null,
  AGE INT not null,
);

上記CREATE文を実行し、以下のINSERT文を実行しました。テーブルに2件のレコードが格納されている状態です。

INSERT文

INSERT INTO SAMPLE_USER (ID, NAME, AGE) VALUES('A000000001', 'サンプル名前1', 20);
INSERT INTO SAMPLE_USER (ID, NAME, AGE) VALUES('A000000002', 'サンプル名前2', 21);

テーブルに接続

データベースに接続し、SQLを発行するプログラムは以下のようになります。

ソース

        try (Connection connection = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
                PreparedStatement ps = connection.prepareStatement("SELECT * FROM SAMPLE_USER")) {
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    System.out.println(rs.getString("id") + ","
                            + rs.getString("name") + ","
                            + rs.getString("age"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

上記のプログラムはデータベース接続、SELECT文発行、内容出力を行っています。DriverManager.getConnection()メソッドの引数は順番に、接続文字列、ユーザー名、パスワードです。今回はインストールした直後の状態で使っているので、上記のプログラムの通りの引数になります。PreparedStatementクラスのインスタンスを生成し、executeQueryメソッドを使うことでSQLを発行することができます。PreparedStatementクラスを使った場合、SQL中にプレースフォルダ「?」を記述することが可能ですが、今回は使いませんでした。

検索結果を出力するためには、next()メソッドを使った後に、getString()を使います。getString()メソッドは2つあります。今回使ったのは引数にテーブルのカラム名を指定する方です。もう一つのメソッドでは列番号をします。while文を使っていますが、この形が一般的のようです。

以下が実行結果です。

結果

A000000001,サンプル名前1,20
A000000002,サンプル名前2,21

テーブルのレコード全件を取得できています。