iOS 第三方使用之FMDB

一. FMDB簡介

FMDB是對libsqlite3框架進(jìn)行的封裝,使用步驟與SQLite相似,并進(jìn)行了多線程并發(fā)處理,所以線程是安全的.
FMDB是OC語言封裝的,不能實(shí)現(xiàn)跨平臺(tái)使用.
FMDB中關(guān)鍵的類:
FMDatabase:一個(gè)單獨(dú)該類的對象,為一個(gè)數(shù)據(jù)庫.
FMResultSet:使用SQL語句查詢返回的結(jié)果集.
FMDatabaseQueue:用于多線程中執(zhí)行多個(gè)查詢或更新,線程是安全的.

二. FMDB創(chuàng)建數(shù)據(jù)庫與表

使用FMDB創(chuàng)建Database的步驟:拼接一個(gè)數(shù)據(jù)庫的地址,一般的存放在沙盒中的Documents文件夾下.

三. FMDB的增,刪,查,改

#pragma mark -- 增,刪,改 (非事務(wù)操作)
- (void)notTransction:(NSString *)sql {
    // 任務(wù)隊(duì)列
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[self sqlPath]];
    // 將任務(wù)添加到隊(duì)列中
    [queue inDatabase:^(FMDatabase *db) {
        BOOL isOK = [self.db executeUpdate:sql];
        if (isOK) {
            NSLog(@"操作成功!");
        } else {
            NSLog(@"操作失敗!");
        }
    }];
}

#pragma mark -- 增,刪,改 (非事務(wù)操作)
- (void)transition:(NSString *)sql {
    // 任務(wù)隊(duì)列
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[self sqlPath]];
    // 將任務(wù)添加到隊(duì)列中
    [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)為字典,存儲(chǔ)在可變數(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語句可以運(yùn)用?參數(shù)占位,綁定參數(shù).

四. FMDB的多線程使用操作

使用FMDB的查詢操作是在子線程中完成的,需要手動(dòng)的將其放入到子線程中進(jìn)行操作,推薦使用GCD的全局隊(duì)列的方式在查詢數(shù)據(jù)的時(shí)候放入到子線程中,獲取完數(shù)據(jù)后,回到主線程,進(jìn)行對UI的刷新操作.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容