一、FMDB的概念
1.什么是FMDB?
(1)FMDB是iOS平臺(tái)的SQLite數(shù)據(jù)庫(kù)框架
(2)FMDB以O(shè)C的方式封裝了SQLite的C語(yǔ)言API
2.FMDB的優(yōu)點(diǎn)
(1)使用起來(lái)更加面向?qū)ο螅∪チ撕芏嗦闊┡煞蟆⑷哂郈語(yǔ)言代碼
(2)對(duì)比蘋(píng)果自帶的Core Data框架晴叨,更加輕量級(jí)和靈活
(3)提供了多線程安全的數(shù)據(jù)庫(kù)操作方法,有效地防止數(shù)據(jù)混亂
二坠非、核心類
FMDB有三個(gè)主要的類
(1)FMDatabase
一個(gè)FMDatabase對(duì)象就代表一個(gè)單獨(dú)的SQLite數(shù)據(jù)庫(kù)
用來(lái)執(zhí)行SQL語(yǔ)句
(2)FMResultSet
- 使用FMDatabase執(zhí)行查詢后的結(jié)果集
(3)FMDatabaseQueue
- 用于在多線程中執(zhí)行多個(gè)查詢或更新,它是線程安全的
三果正、打開(kāi)數(shù)據(jù)庫(kù)
1.通過(guò)制定SQLite數(shù)據(jù)庫(kù)文件路徑創(chuàng)建FMDatabase對(duì)象
FMDatabase *db = [FMDatabase databaseWithPath:path];
if(![db open]){ NSLog(@"數(shù)據(jù)庫(kù)打開(kāi)失敗"); }
2.文件路徑有三種情況
1.具體文件路徑
- 如果不存在會(huì)自動(dòng)創(chuàng)建
2.空字符串
- 會(huì)在臨時(shí)目錄創(chuàng)建一個(gè)空的數(shù)據(jù)庫(kù)
- 當(dāng)FMDatabase連接關(guān)閉時(shí)炎码,數(shù)據(jù)文件也被刪除
3.nil
- 會(huì)創(chuàng)建一個(gè)內(nèi)存中臨時(shí)數(shù)據(jù)庫(kù),當(dāng)FMDatabase連接關(guān)閉時(shí)秋泳,數(shù)據(jù)庫(kù)會(huì)被銷(xiāo)毀
四潦闲、執(zhí)行更新
1.在FMDB中,除查詢以外的所有操作迫皱,都成為“更新”
- create歉闰、drop、insert卓起、update和敬、delete等
2.使用executeUpdate:方法執(zhí)行更新
-(BOOL)executeUpdate: (NSString *)sql,...
-(BOOL)executeUpdateWithFormat: (NSString *)format,...
-(BOOL)executeUpdate: (NSString *)sql WithArgumentsInArray:(NSArray *)arguments
五、執(zhí)行查詢
1.查詢方法
-(FMResultSet *)executeQuery: (NSString *)sql,...
-(FMResultSet *)executeQueryWithFormat: (NSString *)format,...
-(FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray: (NSArray *)arguments
2.示例
//查詢數(shù)據(jù)
FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];
//遍歷結(jié)果集
while([rs next]){ NSString * name = [rs stringForColumn:@"name"]; int age = [rs intForColumn:@"age"]; double score = [rs doubleForColumn:@"score"]; }
六既绩、FMDatabaseQueue
1.FMDatabase這個(gè)類是線程不安全的概龄,如果在多個(gè)線程中同時(shí)使用一個(gè)FMDatabase實(shí)例,會(huì)造成數(shù)據(jù)混亂等問(wèn)題
2.為了保證線程安全饲握,F(xiàn)MDB提供方便快捷的FMDatabaseQueue類
3.FMDatabaseQueue的創(chuàng)建
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
4.簡(jiǎn)單使用
``[queue inDatabase:^(FMDatabase * db){
[db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Jack"]
[db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Rose"]
[db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Jim"]
FMResultSet *rs = [db executeQuery:@"select * from t_student"];
while([rs next]){
//...
}
}];``
5.使用事務(wù)
[queue inTransaction:^(FMDatabase * db, BOOL *rollback){ [db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Jack"] [db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Rose"] [db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Jim"] FMResultSet *rs = [db executeQuery:@"select * from t_student"]; while([rs next]){ //... } }];
6.回滾
*rollback = YES;