【iOS】FMDBでデータ永続化

Coredataに慣れないので, 最近はFMDBを使っています。

fmdb_dir

FMDBを使ってみる

GitHubからソースをDLします。FMDBはMITライセンスです。

fmdb.m以外のsrcをプロジェクトに追加します。

それから,libsqlite3.0.dylibをリンクさせます。

#import "FMDatabase.h"

- (FMDatabase *)getConnection
{
	if( self.dbPath == nil )
	{
		self.dbPath =  [self getDbFilePath];
	}
	
	return [FMDatabase databaseWithPath:self.dbPath];
}

- (NSString*)getDbFilePath
{
	NSArray*  paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
	NSString* dir   = [paths objectAtIndex:0];
	
	return [dir stringByAppendingPathComponent:@"vibly.db"];
}

-(IBAction)createDB:(id)sender{
    FMDatabase* db = [self getConnection];
    
    NSString* sql = @"CREATE TABLE IF NOT EXISTS favorites (day INTEGER PRIMARY KEY AUTOINCREMENT, caption TEXT, word TEXT, count INTEGER, image TEXT, title TEXT, url TEXT, events TEXT, author TEXT, isbn TEXT);";

    NSString* insert = @"INSERT INTO favorites (day,caption,word,count,image,title,url,events,author,isbn) VALUES (?,?,?,?,?,?,?,?,?,?)";
    
    [db open];
    [db executeUpdate:sql];
    
    [db executeUpdate:insert, day_str,[dic_events objectForKey:@"caption"],[dic_events objectForKey:@"word"],(int)[dic_events objectForKey:@"count"],[dic_events objectForKey:@"image"],[dic_events objectForKey:@"title"],[dic_events objectForKey:@"url"],[dic_events objectForKey:@"events"],[dic_events objectForKey:@"author"],[dic_events objectForKey:@"isbn"]];
    
    [db close];
}

Prepared Statementが使えるので ? 部分を引数で追加してきます。

sqlite対話モードで確認する

シミュレータで作成したdbファイルは以下にあります。

$ cd /Users/[USER]/Library/Application Support/iPhone Simulator/[Ver]/Applications/[文字]/Documents/

SQLiteの対話モードを起動します。

$ sqlite3 [DB]

.helpでコマンド一覧を表示します。.qで終了します。SQLに慣れていればcoredataより使いやすいですね。


[1] URL