でも、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ステージの知育系パズルゲーム
0 件のコメント:
コメントを投稿