ホーム > 開発 > SQLiteのラッパーPlausible Database

SQLiteのラッパーPlausible Database

iPhoneでは、素のファイルよりもSQLiteを使ってデータを保存する事が推奨されています。
ですが、Objective-CのAPIは用意されておらず、素のSQLiteのAPIを使う事になります。
SQLiteのAPIは難解ではありませんが、普段のObjective-Cのプログラミングと比較すれば、手間な事には間違い有りません。
少なくても、

  • データ型の変換
  • 文字エンコーディングの変換
  • 例外・エラーの変換
  • C言語水準のリソース管理

につきあう必要があります。
MemoPlusの開発は素のSQLiteを使いましたが、冗長なコードを沢山書いた気がします。

そこでSQLiteのラッパーライブラリを探したところ、Plausible Databaseというライブラリを見つけました。
現在までに二つの製品の開発で使用していますが、特に不具合も無くコードもすっきりしました。
次のような理由で、SQLiteのライブラリを探している方に、Plausible Databaseをオススメします。

  • インターフェースが突飛では無い
    JavaのJDBCあたりの経験があれば、直感的に使用方法が解ります。
  • オブジェクトマッパーでは無く、SQLラッパー
    余計な事をしません。
  • エラー処理の考え方がCocoa的に適切
    バグはNSExceptionで、実行時に起こりうるエラーは戻り値とNSErrorで検出できます。
  • メンテされている
    放置されているコードは使いたく無いものです。

ビルド方法

パッケージをダウンロードしたら、Classesに含まれるライブラリのソースコードを自分のプロジェクトに追加します。ただし〜Tests.mという名前のファイルは、ライブラリ自体のテストコードなので不要です。
次に、Frameworksにlibsqlite3.dylibを追加して、SQLiteの本体をリンクします。
最後にビルド設定に下記を追加します。

OTHER_CFLAGS -DPL_DB_PRIVATE=1

使用方法

データベースのオープンとクローズは、こんな感じです。

PLSqliteDatabase *database = [[PLSqliteDatabase alloc] initWithPath:<ファイルパス>];
NSError *error = nil;
if (![database openAndReturnError:&error]) {
    <エラー表示>
}

…

[database close];
[database release];

問い合わせはこんな感じです。

NSError *error = nil;
NSObject<PLResultSet> *resultSet = [database executeQueryAndReturnError:&error statement:@"select id, name, date from Datas"];
if (!resultSet) {
    <エラー表示>
}
while ([resultSet next]) {
    NSInteger id_ = [resultSet intForColumn:@"id"];
    NSString *name = [resultSet stringForColumn:@"name"];
    NSDate *date = [resultSet dateForColumn:@"date"];
    <データを使う>
}
[resultSet close];

更新はこんな感じです。

NSInteger id_ = <データを用意>
NSString *name = <データを用意>
NSDate *date = <データを用意>
NSError *error = nil;
if (![database executeUpdateAndReturnError:&error statement:@"insert into Datas(id, name, date) values(?, ?, ?)", id_, name, date]) {
    <エラー表示>
}

iPhoneではあまり使う機会は無いと思いますが、プリペアドステートメントやトランザクションもサポートされています。

広告
カテゴリー:開発 タグ:
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。