H2を.NETで使用する

追記:『H2SharpはDbProviderFactoryに対応していない - bouzuya@hateda

概要

H2(http://www.h2database.com/)は100%Javaで書かれた軽量のデータベースです。RDBMSとしての必要最低限の機能を備えているため、Javaを使っていたときには採用することがありました。

このH2を.NETで使えないか調べたので、まとめます。ちなみに、内容はTwitterで私が投げていたものです。

必要なもの(IKVM.NET+H2Sharp)

H2の公式サイトには以下のような記述があります。

Using H2 in Microsoft .NET

The database can be used from Microsoft .NET even without using Java, by using IKVM.NET. You can access a H2 database on .NET using the JDBC API, or using the ADO.NET interface.


Using the ADO.NET API on .NET

An implementation of the ADO.NET interface is available in the open source project H2Sharp.

どうやらIKVM.NETを使えばJDBCAPIで使える。ADO.NETAPIで使う場合には、さらにH2Sharpを使えば良いようです。

私はADO.NETAPIで使いたいので、IKVM.NET+H2Sharpが必要なようです。

IKVM.NET

IKVM.NET(http://www.ikvm.net/)は.NET上でJavaを動かそうというプロジェクトのようです。仕組みを追いかけるのは難しそうなので、今回は詳細は調べませんでした。

IKVM.NETを使うとh2.jarをh2.dllに変換することができるようです。

H2Sharp

H2Sharp(http://code.google.com/p/h2sharp/)は、h2.dllをADO.NETAPIで使えるようにするためのラッパーです。h2.dllをそのまま使うとJDBCAPIでしか使えないので、これを併用します。

ダウンロードページ(http://code.google.com/p/h2sharp/downloads/list)にある最新版は1.1.0.0なのですが、この中にDLLは含まれておらず、ビルドが必要です。.vcprojファイルを開いてビルドします。

私はMicrosoft Visual C# 2010 Express Editionを使ってビルドしました。

ビルドしようとすると、参照にあるIKVM.NET用DLLがないので失敗します。エラーメッセージによるとIKVM.NETのバージョンは0.36.0.11(2008-04-07)のようなので、これを別途ダウンロードします。(http://sourceforge.net/projects/ikvm/files/)

参照には、IKVM.OpenJDK.ClassLibrary.dllとIKVM.Runtimeを追加します。これでビルドが成功します。

ちなみに、H2Sharp(1.1.0.0(2008-07-03))は、H2(1.0.74(2008-06-21))とIKVM.NET(0.36.0.11(2008-04-07))を使っているようです。H2もIKVM.NETも、より新しいバージョンが出ていますが、APIに変更があるので、バージョンは合わせておいた方が無難だと思います。ただし、セキュリティ上の問題があるかもしれません。