2012年9月22日土曜日

FMDBの基本的な使い方

iOSでSQLiteを容易に利用できるようにするライブラリ「FMDB」の基本的な使い方をメモで。


FMDBを利用する準備

ライブラリ「libsqlite3.0.dylib」の追加

まずは、SQLite用ライブラリ「libsqlite3.0.dylib」をプロジェクトに追加します。



FMDBをダウンロード&プロジェクトに追加

  1. FMDBのソースコードをダウンロード、解凍
  2. 解凍したフォルダ内の「src」フォルダの中にあるfmdb.m以外のクラス(参照1)をプロジェクトに追加(参照2)
  3. ビルドしてエラーが出ないことを確認

参照1

FMDatabase.h/mFMDatabaseAdditions.h/mFMDatabasePool.h/mFMDatabaseQueue.h/mFMResultSet.h/m

参照2



FMDBを用いたSQLiteの基本的な操作

FMDBの基本的な使い方を書いていきます。

データベースを使用する準備

まずは準備。
今回は予め作成しておいたファイルを扱います。
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  //(1)
NSString *dbPathStr = [path objectAtIndex:0];
FMDatabase *db = [FMDatabase databaseWithPath:[dbPathStr stringByAppendingPathComponent:@"database.db"]];  //(2)

データベースのパスを指定してFMDatabasクラスのインスタンスを生成しそれを使います。

(1)

NSSearchPathForDirectoriesInDomains:メソッドを使用し、シミュレータであれば以下のようなDocumentsフォルダのパスを取得します。

/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/xxxxxx/Documents/

(2)

stringByAppendingPathComponent:メソッドで取得したパスの末尾にデータベースのファイル名を追加します。

databaseWithPath:メソッドにデータベースファイルのパスを指定し、ファイルが既にある場合は参照、なければ新規にデータベースファイルを作成し、FMDatabaseインスタンスを返します。

CREATE TABLE

テーブルの作成。
FMDatabase *db = [FMDatabase databaseWithPath:@"データベースのパス"];
NSString *sql = @"CREATE TABLE IF NOT EXISTS tablename (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);";
 
[db open];
[db executeUpdate:sql];
[db close];

データベースのパスはこの前に行った方法で取得してください。以下に記述するINSERT、DELETE、SELECTも同様です。

INSERT

データの挿入。
FMDatabase *db = [FMDatabase databaseWithPath:@"データベースのパス"];
NSString *sql = @"INSERT INTO tablename (name) VALUES (?)";
 
[db open];
[db executeUpdate:sql, @"入れるデータ"];
[db close];

DELETE

データの削除。
FMDatabase *db = [FMDatabase databaseWithPath:@"データベースのパス"];
NSString *sql = @"DELETE FROM tablename WHERE id = ?";
 
[db open];
[db executeUpdate:sql, [NSNumber numberWithInteger:n]];
[db close];

SELECT

データの取得。
FMDatabase *db  = [FMDatabase databaseWithPath:@"データベースのパス"];
NSString *sql = @"SELECT id, name FROM tablename;";
 
[db open];
 
FMResultSet *results = [db executeQuery:sql];
while ([results next]) {
    NSLog(@"%d %@", [results intForColumn:@"id"], [results stringForColumn:@"name"]);
}
 
[db close];

FMDatabaseクラスのexecuteQuery:メソッドの結果はFMResultSetインスタンスとして返さなければなりません。

データの列挙にはFMResultSetクラスのnextメソッドを使用しています。このメソッドは行がある場合はtrue、ない場合はnoを返すので、while文を使用しデータをすべて列挙しています。

executeUpdate:メソッドとexecuteQuery:メソッドについて

SQL文を実行するexecuteUpdate:メソッドとexecuteQuery:メソッドの使い所について。

更新処理系(CREATE 、INSERT、DELETE文 など):executeUpdate:メソッド
参照処理系(SELECT文 など):executeQuery:メソッド

参考記事

iOSでSQLiteを使う(FMDB) - Selection 9
SQLiteを利用する方法 - プログラミングノート
Objective-Cで簡単にsqliteが使えるFMDBについて調べてみた - 人工無脳が作りたい

0 件のコメント:

コメントを投稿