之前都是直接用sqlite 的C語(yǔ)言API晚树,感覺(jué)也沒(méi)有什么不好用的,就是封裝性不好受葛,不能重用;CoreData也用過(guò)偎谁,感覺(jué)太笨重总滩,真心不好用。
從今天開(kāi)始學(xué)下FMDB和WCDB.
一巡雨、簡(jiǎn)單說(shuō)明
FMDB是iOS平臺(tái)的SQLite數(shù)據(jù)庫(kù)框架,它以O(shè)C的方式封裝了 sqlite 的C 語(yǔ)言API闰渔。
它的優(yōu)點(diǎn)有:
1、更加面向?qū)ο箢硗∪チ舜罅康娜哂嗟腃語(yǔ)言代碼
2冈涧、相比CoreData,更加輕量級(jí)和靈活
3、提供了多線(xiàn)程安全的數(shù)據(jù)庫(kù)操作方法正蛙,有效地防止數(shù)據(jù)混亂
二督弓、核心類(lèi)
1、FMDatabase
數(shù)據(jù)庫(kù)對(duì)象乒验,一個(gè)FMDatabase對(duì)象就代表一個(gè)獨(dú)立的sqlite數(shù)據(jù)庫(kù)愚隧,可以用來(lái)執(zhí)行各種sql語(yǔ)句。
2锻全、FMResultSet
結(jié)果集狂塘,sql語(yǔ)句的執(zhí)行結(jié)果
3、FMDatabaseQueue
線(xiàn)程安全的隊(duì)列鳄厌,用于在多線(xiàn)程環(huán)境中執(zhí)行查詢(xún)或修改操作
三荞胡、增刪改查
在增刪改查之前,要先創(chuàng)建表結(jié)構(gòu)了嚎。
在FMDB中泪漂,除了查詢(xún)以外廊营,所有的操作都是update,包括建表窖梁。
打開(kāi)數(shù)據(jù)庫(kù):
?NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
?NSString *dbPath = [docPath stringByAppendingString:@"/test.db"];
?FMDataBase *db =?[FMDatabase databaseWithPath:dbPath];
1赘风、創(chuàng)建表結(jié)構(gòu):
?? if([db open]) {
? ? ? ? NSString *sql = @" create table if not exists student('ID' INTEGER PRIMARY KEY AUTOINCREMENT,'name' TEXT NOT NULL,'phone' TEXT NOT NULL,'score' INTEGER NOT NULL)";
? ? ? ? BOOLflag = [self.dbexecuteUpdate:sql];
? ? ? ? if(flag) {
? ? ? ? ? ? NSLog(@"create table success");
? ? ? ? }
? ?}
2、新增
?NSString *sql = [NSString stringWithFormat:@"insert into student (name,phone,score) values (?,?,?)"];
?BOOL result = [self.db executeUpdate:sql withArgumentsInArray:@[@"lzt",@"13569874154",@(69)]];
?if(result) {
? ? ? ? NSLog(@"insert ok");
?}
3纵刘、修改
NSString *sql = [NSString stringWithFormat:@"update student set name = ?? where? id = ? "];
?BOOL result = [self.db executeUpdate:sql withArgumentsInArray:@[@"lztOK",@(2)]];
? ? if(result) {
? ? ? ? NSLog(@"update ok");
? ? }
4邀窃、刪除
?NSString *sql = [NSString stringWithFormat:@" delete? from student where id = ? "];
? ? BOOL result = [self.db executeUpdate:sql withArgumentsInArray:@[@(1)]];
? ? if(result) {
? ? ? ? ? NSLog(@"delete? ok");
? ? }
最后,要記得關(guān)閉數(shù)據(jù)庫(kù) [db close]