一. FMDB簡介
FMDB是對libsqlite3框架進(jìn)行的封裝,使用步驟與SQLite相似,并進(jìn)行了多線程并發(fā)處理,所以線程是安全的.
FMDB是OC語言封裝的,不能實現(xiàn)跨平臺使用.
FMDB中關(guān)鍵的類:
FMDatabase:一個單獨該類的對象,為一個數(shù)據(jù)庫.
FMResultSet:使用SQL語句查詢返回的結(jié)果集.
FMDatabaseQueue:用于多線程中執(zhí)行多個查詢或更新,線程是安全的.
二. FMDB創(chuàng)建數(shù)據(jù)庫與表
使用FMDB創(chuàng)建Database的步驟:拼接一個數(shù)據(jù)庫的地址,一般的存放在沙盒中的Documents文件夾下.
三. FMDB的增,刪,查,改
#pragma mark -- 增,刪,改 (非事務(wù)操作)
- (void)notTransction:(NSString *)sql {
// 任務(wù)隊列
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[self sqlPath]];
// 將任務(wù)添加到隊列中
[queue inDatabase:^(FMDatabase *db) {
BOOL isOK = [self.db executeUpdate:sql];
if (isOK) {
NSLog(@"操作成功!");
} else {
NSLog(@"操作失敗!");
}
}];
}
#pragma mark -- 增,刪,改 (非事務(wù)操作)
- (void)transition:(NSString *)sql {
// 任務(wù)隊列
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[self sqlPath]];
// 將任務(wù)添加到隊列中
[queue inDatabase:^(FMDatabase *db) {
// 開啟事務(wù)
[db beginTransaction];
BOOL isOK = [self.db executeUpdate:sql];
if (isOK) {
NSLog(@"操作成功!");
} else {
NSLog(@"操作失敗!");
}
// 提交事務(wù)
[db commit];
}];
}
事務(wù)的方式能加快操作數(shù)據(jù)庫的允許速度.
查詢操作
#pragma mark -- 查詢
- (NSMutableArray *)selectMethod:(NSString *)sql {
// 打開數(shù)據(jù)庫
[self openOrCreateSQLite];
// 查詢返回結(jié)果集對象
FMResultSet *resultSet = [self.db executeQuery:sql];
// 遍歷記錄,將記錄轉(zhuǎn)為字典,存儲在可變數(shù)組中.
NSMutableArray *array = [[NSMutableArray alloc] init];
while ([resultSet next]) {
// 將每一條記錄轉(zhuǎn)化成為字典
NSDictionary *dict = [resultSet resultDictionary];
[array addObject:dict];
}
// 釋放返回結(jié)果集對象
[resultSet close];
// 關(guān)閉數(shù)據(jù)庫
[self closeSQLite];
return array;
}
增刪查改的sql語句可以運用?參數(shù)占位,綁定參數(shù).
四. FMDB的多線程使用操作
使用FMDB的查詢操作是在子線程中完成的,需要手動的將其放入到子線程中進(jìn)行操作,推薦使用GCD的全局隊列的方式在查詢數(shù)據(jù)的時候放入到子線程中,獲取完數(shù)據(jù)后,回到主線程,進(jìn)行對UI的刷新操作.