SQLite WinRT WrapperはWindows Phone 8向けに軽量なWindows Runtime (WinRT) APIを使ってSQLiteデータベースにアクセスする機能を提供する。下記のようなさまざまなデータベース処理機能を提供する。
- データベースをオープンする - sqlite3_open_v2関数のラップ
- 単一のSQL文を実行する - sqlite3_exec関数をラップ
- 複雑なSQLを作成する - sqlite3_prepare16_v2関数をラップ
- SQLに変数をバインドする - sqlite3_bind_xyz関数をラップ
- SQLの実行結果を反復的に処理する - sqlite3_stepとsqlite3_column_xyz関数のラップ
上記の処理は非同期パターンに従う。つまり、処理はワーカースレッド上で行われるので、データベースに接続されているアプリに速度と流動性を与える。このライブラリは例外ベースのプログラミングをサポートし、SQLiteの機能を薄くラップするように設計されている。
SQLite WinRT Wrapperはデータベースからの取得結果に対してコレクションベースのアクセスを提供する。しかし、この機能はデフォルトでは有効になっていない。処理が遅くなり、すべての列を文字列として返却してしまうからだ。この機能を使うには、EnableColumnsProperty()をコールする必要がある。
var statement = await db.PrepareStatementAsync("SELECT rowid, CityName FROM Cities;");
statement.EnableColumnsProperty();
読み取り専用データベースに関連する問題に対しては、ユーザはtemp_store pragmaを使って、SQLiteがインメモリの一時テーブルとインデックスを使うように強制するか、最初にアプリを動かしたときに、データベースをインストールフォルダから別のストレージフォルダにコピーして対処できる。最初の方法は簡単だ。2番目の方法はディスクスペースが必要で、初期化に時間がかかる。しかし、データベースのファイルが小さいなら遅延は感じないだろう。
"読み取り専用データベースで避ける必要のあるその他の機能はWALの値を使ったjournal_mode pragmaです(write-ahead logging)。"とWindows Phone Developer PlatformのプロダクトマネージャであるPeter Torr氏は言う。