SQLitePetite: 最小限の機能を提供
SQLiteの最小限のインターフェイスを考えましょう。要は指定したデータベースに対してSQL文を実行でき、SELECTの結果が得られればよいのですから、
- open:データベースのオープン
- close:データベースのクローズ
- exec:SQL文の実行(と結果の取得)
これらが実行できればよいことになります。これら3つを実装する小さな小さなライブラリ「SQLite3Petite」を作ります。
| open | SQLite3はデータベースとしてファイルもしくはメモリのいずれかが選べます。openの引数に文字列を与えればファイル、引数なしならメモリをデータベースとしてオープンすることにしましょう。 |
| close | 現在開けているデータベースをクローズします。引数はありません。 |
| exec | 下記参照。 |
C版SQLiteのSQL実行関数、sqlite3_exec16は、
typedef int (*sqlite3_callback16)(void*,int,__wchar_t**, __wchar_t**); int sqlite3_exec16( sqlite3 *db, /* データベース */ const __wchar_t *zSql, /* SQL文 */ sqlite3_callback16 xCallback, /* 結果を返すコールバック */ void *pArg, /* コールバックに渡す任意の値 */ __wchar_t **pzErrMsg /* エラーメッセージ格納場所 */ );
というプロトタイプ宣言がされています。.NET言語(C#、VB、etc.)からも極力同じ使い勝手にそろえることにします。そのために.NETでのコールバックはdelegateを利用しましょう。
C#からは次のようなコードでSQLiteが使えればいいと思っています。
using System; using SQLite3Petite; class Program { // 検索結果の出力 static bool print(string[] values, string[] names) { for ( int i = 0; i < values.Length; ++i ) { Console.Write("{0} = [{1}] ", names[i], values[i]); } return true; } static void Main() { Database db = new Database(); db.open("電話帳.db"); string err; db.exec("SELECT 氏名, 電話番号 FROM 電話帳", print, out err); db.close(); } } }
ソリューションにCLRクラスライブラリプロジェクト「SQLite3Petite」を追加して作業開始です。

