H2を.NETで使用する
追記:『H2SharpはDbProviderFactoryに対応していない - bouzuya@hateda』
概要
H2(http://www.h2database.com/)は100%Javaで書かれた軽量のデータベースです。RDBMSとしての必要最低限の機能を備えているため、Javaを使っていたときには採用することがありました。
このH2を.NETで使えないか調べたので、まとめます。ちなみに、内容はTwitterで私が投げていたものです。
必要なもの(IKVM.NET+H2Sharp)
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.
An implementation of the ADO.NET interface is available in the open source project H2Sharp.
どうやらIKVM.NETを使えばJDBCのAPIで使える。ADO.NETのAPIで使う場合には、さらに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.NETのAPIで使えるようにするためのラッパーです。h2.dllをそのまま使うとJDBCのAPIでしか使えないので、これを併用します。
ダウンロードページ(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に変更があるので、バージョンは合わせておいた方が無難だと思います。ただし、セキュリティ上の問題があるかもしれません。
参考
- H2(http://www.h2database.com/)
- IKVM.NET(http://www.ikvm.net/)
- H2Sharp(http://code.google.com/p/h2sharp/)