在ios使用FMDB
安裝FMDB
方法很簡單,就跟所有的opensourcelibrary一樣的三步驟。
1.首先你要先把libsqlite3.dylib加進library
2.在需要用到FMDB的檔案中#import"FMDatabase.h"
3.把FMDB的.h跟.m加進你的project中
接著就可以開心的使用FMDB
產生Database
基本上就是透過+[FMDatabase databaseWithPath]取產生Database instance。
NSURL *appUrl = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; NSString *dbPath = [[appUrl path] stringByAppendingPathComponent:@"MyDatabase.db"]; FMDatabase* db = [FMDatabase databaseWithPath:dbPath]; if (![db open]) { NSLog(@"Could not open db"); }
產生所需table
其實寫過sql的應該對接下來的動作都不陌生,都一樣就是sql語法囉,詳細的請參考sqlite文件
下面的動作是產生一個user的table,並且有uid,name,descritpion三個column。我們使用IFNOTEXISTS來保證table不存在才會產生table。
if(![db executeUpdate:@"CREATE TABLE IF NOT EXISTS user (uid integer primary key asc autoincrement, name text, description text)"]) { NSLog(@"Could not create table: %@", [db lastErrorMessage]); }
新增record
在FMDB中,它有提供很貼心類似-[NSStringstringWithFormat:...]的功能,但是比較不一樣的是如果你是字串,它會幫你加上括號,使用上更為便利。
if(![db executeUpdate:@"INSERT INTO user (name, description) VALUES (?,?)", name, description]) { NSLog(@"Could not insert data: %@", [db lastErrorMessage]); }
刪除record
一樣是下sql語法,這邊比較需要注意的是如果你要傳進去的是int,double這種基本形態,記得要轉換成物件,也就是用+[NSNumbernumberWithInt]去轉換
if(![_db executeUpdate:@"DELETE FROM user WHERE uid = ?", [NSNumber numberWithInt:uid]]) { NSLog(@"Could not delete data: %@", [db lastErrorMessage]); }
查詢資料
在FMDB中有提供另外一個classFMResultSet來存放查詢出來的records,透過-[FMResultSetnext]來iterate出所有的record
NSMutableArray* items = [NSMutableArray arrayWithCapacity:0]; FMResultSet *rs = [db executeQuery:@"SELECT uid, name, description from user"]; while ([rs next]) { int uid = [rs intForColumn:@"uid"]; NSString *name = [rs stringForColumn:@"name"]; NSString *description = [rs stringForColumn:@"description"]; [items addObject:[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:uid], @"uid", name, @"name", description, @"description", nil]]; } [rs close];
基本上在其他oo平台中有用過sql的,對於FMDB的設計應該並不陌生,可以說完全不會有太多的困難。而相較於用傳統的plist或是archive的方法,我相信不管是效能上或是功能上,Sqlite+FMDB的組合絕對會更有優勢。對於中型以上的iOS程式應該會是標準配備。