Java H2DB〜インストールからテストテーブル作成と表示〜

H2 データベースのインストール

ダウンロード先
上記のリンクから、下のようなページに遷移できます。

H2DBのダウンロード

そして、赤枠の部分をクリックします。

同様に、赤枠の部分をクリックします。

そうすると、「h2-XXXX-XX-XX.zip」のような名前のファイルがダウンロードできます。
サンプル:「h2-2019-10-14.zip」

h2DBのJARファイルをビルドパスに通す

Eclipseを開きプロパティ -> ライブラリ・タブを開きます

そして、赤枠にある「外部JARファイルの追加」をクリックします。
そこに、h2*.jarというファイルがあるのでそれを追加します。

bat(sh)ファイルを起動する

h2*.jarファイルの隣にある「h2.bat(Windows用)かh2.sh(Mac, Linux用)」のファイルを起動する(ダブルクリック)

http://localhost:8082」にアクセスするとしたのような画面が見れます

日本語の表示もできました。そしたら「~/test」と書いてある部分を自分の指定したパスに変更します。現状では、マイドキュメント直下です。

次のようなパスを入力しました。

jdbc:h2:/Users/ユーザー名/Java/jars/h2/db_file

そして「接続」ボタンをクリック少し待つとしたのような画面が見れます。

これで、DBの作成が完了です。

テーブルを作成する

テスト用のテーブルを作成します。
画面にある「SQLステートメントのサンプル」の下の部分をクリックします。

するとSQLが生成されて下のような表示に変わります。

そして、をクリックしますとテストテーブルが作成できます。

実行結果は下のようなものです。

JDBCで接続してみる

Javaプログラムをしたのように作成します。

  1. H2Dao.java

    public class H2Dao {
    private final String DB_URI = "jdbc:h2:/Users/takk/Java/jars/h2/db_file/test.mv.db";
    private Connection con;
    
    public H2Dao() throws SQLException {
        try {
            // DriverManager.getConnection(URI   , ユーザー名, パスワード(なし))
            con = DriverManager.getConnection(DB_URI, "sa", "");
            Statement stmt = con.createStatement();
            createTables(stmt);
            ResultSet result = stmt.executeQuery("select * from test;");
    
            while(result.next()) {
                int id = result.getInt(1);
                String name = result.getString(2);
                System.out.println("ID: " + id + " Name: " + name);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw e;
        }
    }
    
    public void createTables(Statement stmt) throws SQLException {
        String sql = "DROP TABLE IF EXISTS TEST;\n" + 
                "CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));\n" + 
                "INSERT INTO TEST VALUES(1, 'Hello');\n" + 
                "INSERT INTO TEST VALUES(2, 'World');\n" + 
                "SELECT * FROM TEST ORDER BY ID;\n" + 
                "UPDATE TEST SET NAME='Hi' WHERE ID=1;\n" + 
                "DELETE FROM TEST WHERE ID=2;";
        stmt.execute(sql);
    }
    public void finalize() {
        try {
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            con = null;
        }
    
    }
    }

そして、このクラスを動かします。今回は、JUnitを使用します。

public class H2DaoTest {

    @Test
    public void testConstractor() {
        try {
            H2Dao dao = new H2Dao();
        } catch (SQLException e) {
            fail("エラーになりました");
        }

    }
}

これで、実行した結果が緑になればOKです。

練習

ここまできたら、上記のコードpublic void createTables(Statement stmt) throws SQLException にあるSQLを改造してSQLを実行してみましょう。

ヒント

更新系の処理と検索(データの取得)系の処理では、呼び出すメソッドが違います。

  • 更新系:Statement#execute()
  • 検索系:Statement#executeQuery()

<更新系>

    private void execute(String sql) {
        try {
            Statement stmt = con.createStatement();
            stmt.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

<検索系>

    private List<String> executeQuery(String sql, boolean isRetuen) {
        System.out.println("*** executeQuery ***");
        List<String> list = new ArrayList<String>();
        try {
            Statement stmt = con.createStatement();
            ResultSet result = stmt.executeQuery(sql);
            ResultSetMetaData meta = result.getMetaData();
            int colCount = meta.getColumnCount();
            while(result.next()) {
                for (int i = 1; i <= colCount; i++) {
                    System.out.print(i + ": " + result.getString(i) + " ");
                }
                System.out.println();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        if (isRetuen) {
            return list;
        }
        return null;
    }

でわでわ。。。

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す