iOSアプリでデータベースを使いたくなることがあります。
でも、Core Dataはなんだか取っ付きにくいですよね。
そこで、SQLiteを使ってみてはいかがでしょうか?
FMDBというライブラリを使えばiOSアプリでも簡単に使えます。
準備
1.ライブラリをダウンロード
https://github.com/ccgus/fmdb
2.ライブラリを追加
ライブラリの『fmdb』以下にあるファイルを全部Xcodeに追加する。
3.フレームワークの追加
『libsqlite3.0.dylib』を追加する。
使い方
初期処理
#import "FMDatabase.h"
//FMDB
FMDatabase *db;
//DBファイル名
NSString *DB_FILE = @"test_db.sqlite3";
//DBファイルのパスを取得
NSString *dbPath = nil;
NSArray *documentsPath = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
//取得データ数を確認
if ([documentsPath count] >= 1) {
//固定で0番目を取得
dbPath = [documentsPath objectAtIndex:0];
//パスの最後にファイル名を追加
dbPath = [dbPath stringByAppendingPathComponent:DB_FILE];
} else {
//エラー
NSLog(@"database file not found.");
}
//DBファイルがDocument配下に存在するか判定
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:dbPath]) {
//存在しない場合、DBファイルをコピー(初回起動時のみ)
NSBundle *bundle = [NSBundle mainBundle];
NSString *orgPath = [bundle bundlePath];
orgPath = [orgPath stringByAppendingPathComponent:DB_FILE];
//DBファイルをDocument配下へコピー
NSError *error = nil;
if (![fileManager copyItemAtPath:orgPath toPath:dbPath error:&error]) {
//エラー
NSLog(@"db file copy error. : %@ to %@.", orgPath, dbPath);
}
}
//パスを設定して、データベースオープン
db = [FMDatabase databaseWithPath:dbPath];
[db open];
//処理が終わったら、データベースクローズ
[db close];
SELECT
//クエリ実行
NSString *query = @"SELECT item_id, word, date FROM items WHERE word = ? ";
FMResultSet *rs = [db executeQuery:query, @"test1"];
if ([db hadError]) {
//エラー
NSLog(@"db execute error");
}
//結果の取得(カラム名指定)
while ([rs next]) {
//数値の取得
int itemID = [rs intForColumn:@"item_id"];
//文字列の取得
NSString *word = [rs stringForColumn:@"word"];
//日付の取得
NSDate *date = [rs dateForColumn:@"date"];
}
//ResultSetのクローズ
[rs close];
INSERT
NSString *word = @"test1";
NSString *mean = @"テスト1";
//INSERT実行
NSString *sql = @"INSERT INTO items (word, mean) VALUES (?, ?) ";
[db executeUpdate:sql, word, mean];
if ([db hadError]) {
//エラー
NSLog(@"db insert error");
}
UPDATE
NSNumber *itemID = [NSNumber numberWithInt:12345];
NSDate *timeStamp = [NSDate date];
//UPDATE実行
NSString *sql = @"UPDATE items SET date = ? WHERE item_id = ? ";
[db executeUpdate:sql, timeStamp, itemID];
if ([db hadError]) {
//エラー
NSLog(@"db update error");
}
DELETE
NSNumber *itemID = [NSNumber numberWithInt:12345];
//DELETE実行
NSString *sql = @"DELETE FROM items WHERE item_id = ? ";
[db executeUpdate:sql, itemID];
if ([db hadError]) {
//エラー
NSLog(@"db delete error");
}
まとめ
RDBを使ったことがある人は簡単ですよね。
Core DataでDBを使うことを断念した人も、FMDBでSQLiteを検討してみてはいかがでしょうか。
せり上がってくる数字と演算子で計算式を作り消して行く
5つ正解でクリアー、全30ステージの知育系パズルゲーム