【H2 DB】C#.NETでh2.dllとIKVM.NETを使用してWindowsFormアプリ開発で利用する方法
H2 DataBase
H2DatabaseEngineのDB環境設定は今回は省きます。
まだH2DBを使ったことないという方は、H2 DataBaseEngineのサイトに飛んで見て下さい。軽量で簡単にDBが構築できるので試しに使ってみるのもいいかもしれませんよ。embeddedモード、serverモード両方利用できるのも特徴ですね。
僕のオススメポイントは、CSVファイルの読みRead書きwriteが簡単にコマンドで操作できるところですね。
H2DB Table
前提として、H2_TESTというDBにH2_TESTというテーブルを作成しておきます。
《Table内容》カラム名:ID,NAME,CREATEDATE
Nuget
WindowsForm開発プロジェクトで「h2」を検索します。
h2をインストールします。
参照
下記の図がh2のNugetをインストールすると、参照されるライブラリになります。
h2 Ver.
H2 DataBase EngineのVer.1.4.200のDBを構築していますが、
現在、Nugetからインストールできる「h2」は、バージョン:1.4.199
と記載されています。
バージョンに相違があっても今回のプログラムでは動きました。
依存関係欄には、「Any,Version」と記載されているので、バージョンが違っても動作しそうですね。
ソースコード
今回の画面の設計は下記の図のように作成しています。
データベースを活用するならDataGridViewにデータを表示する機会は多いと思いますので、今回は、データ表示するようなソースコードを書いてみました。
using java.sql;
using System;
using System.Data;
using System.Windows.Forms;
namespace H2_TEST
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 画面起動時イベント
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
// H2ドライバーload
org.h2.Driver.load();
// H2DB接続Connect
Connection conn = Connect_logic();
// H2DB接続Connect
Createtable_logic(conn);
// テーブル作成Create Table
Insert_logic(conn);
// 検索Select
Select_logic(conn);
// 接続閉じる.
conn.close();
}
/// <summary>
/// 接続ロジック
/// </summary>
/// <returns></returns>
public Connection Connect_logic()
{
// H2DB接続Connect
Connection conn = DriverManager.getConnection("jdbc:h2:tcp://localhost/G:/H2DB/DB/H2_TEST;", "sa", "sa");
return conn;
}
/// <summary>
/// テーブル作成ロジック
/// </summary>
/// <param name="conn"></param>
public void Createtable_logic(Connection conn)
{
// テーブル作成Create Table
PreparedStatement statement = conn.prepareStatement("CREATE TABLE IF NOT EXISTS TEST_INFO(id INT auto_increment, NAME varchar2(200), CREATEDATE timestamp);");
statement.execute();
}
/// <summary>
/// レコード登録ロジック
/// </summary>
public void Insert_logic(Connection conn)
{
// 現在時刻取得
string dateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
// 登録Insert
PreparedStatement statement2 = conn.prepareStatement("INSERT INTO TEST_INFO(NAME, CREATEDATE) VALUES('EXTRA-LAB', '" + dateTime + "');");
statement2.execute();
}
/// <summary>
/// 検索&結果ロジック
/// </summary>
public void Select_logic(Connection conn)
{
// テキスト欄をクリア
richTextBox1.Clear();
// 検索Select
PreparedStatement statement3 = conn.prepareStatement("SELECT * FROM TEST_INFO;");
ResultSet set = statement3.executeQuery();
// 結果データをDataGridに表示する
DataSet ds = new DataSet();
DataTable dt = new DataTable
{
TableName = "TEST_INFO",
};
// 3列定義します。
dt.Columns.Add().ColumnName = "ID";
dt.Columns.Add().ColumnName = "NAME";
dt.Columns.Add().ColumnName = "CREATEDATE";
// DataSetにdtを追加します。
ds.Tables.Add(dt);
// 全件数分繰り返し
while (set.next())
{
DataRow row = ds.Tables[0].NewRow();
row[0] = set.getInt(1);
row[1] = set.getNString(2);
row[2] = set.getNString(3);
ds.Tables[0].Rows.Add(row);
// 文字列連結
string result = "ID:" + set.getInt(1) + " NAME:" + set.getNString(2) + " CREATEDATE:" + set.getNString(3) + "\n";
// テキストボックスに表示する場合
richTextBox1.AppendText(result);
}
//グリッドビューにデータ表示
dataGridView1.DataSource = ds.Tables[0];
}
/// <summary>
/// テーブル作成ボタン
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
// H2DB接続Connect
Connection conn = Connect_logic();
//テーブル作成ロジック実行
Createtable_logic(conn);
}
/// <summary>
/// レコード登録ボタン
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
// H2DB接続Connect
Connection conn = Connect_logic();
//レコード登録ロジック実行
Insert_logic(conn);
}
/// <summary>
/// 結果表示ボタン
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
// H2DB接続Connect
Connection conn = Connect_logic();
// 検索&結果表示ロジック実行
Select_logic(conn);
}
}
}
結果
アプリ実行結果が下記の図のようになります。
C#.NETでH2 Database Engineを操作できるようになりました。
これで、H2Databaseの活用方法が広がったと思います。
色々とシステム開発に役に立つのではないのでしょうか。
では。(@^^)/~~~