FMDBを利用する準備
ライブラリ「libsqlite3.0.dylib」の追加
まずは、SQLite用ライブラリ「libsqlite3.0.dylib」をプロジェクトに追加します。FMDBをダウンロード&プロジェクトに追加
- FMDBのソースコードをダウンロード、解凍
- 解凍したフォルダ内の「src」フォルダの中にあるfmdb.m以外のクラス(参照1)をプロジェクトに追加(参照2)
- ビルドしてエラーが出ないことを確認
参照1
FMDatabase.h/m、FMDatabaseAdditions.h/m、FMDatabasePool.h/m、FMDatabaseQueue.h/m、FMResultSet.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 9SQLiteを利用する方法 - プログラミングノート
Objective-Cで簡単にsqliteが使えるFMDBについて調べてみた - 人工無脳が作りたい
0 件のコメント:
コメントを投稿