iOS FMDB有返回結(jié)果集和無返回結(jié)果集

準(zhǔn)備工作

在當(dāng)前類的延展中聲明一個(gè)數(shù)據(jù)庫的對(duì)象

@interface RootViewController ()
@property (strong, nonatomic)FMDatabase *db;
@end

創(chuàng)建一個(gè)數(shù)據(jù)庫的路徑

- (NSString *)dbPath{
    NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES)firstObject] stringByAppendingPathComponent:@"FMDB.sqlite"];
    return dbPath;
}

打開或者創(chuàng)建一個(gè)數(shù)據(jù)庫

- (FMDatabase *)openOrCreate{
    //創(chuàng)建數(shù)據(jù)庫對(duì)象
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        self.db = [FMDatabase databaseWithPath:[self dbPath]];
    });
    
    if ([self.db open]) {
        return self.db;
    }else {
        NSLog(@"打開失敗");
        return nil;
    }
}

FMDB之無返回結(jié)果集

一切不是SELECT命令的命令都視為更新。這包括 CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE (等)。簡(jiǎn)單來說,只要不是以SELECT開頭的命令都是UPDATE命令,也就是無返回結(jié)果集。
示例代碼

- (BOOL)opertationNoResultWithSql:(NSString *)sql operationTag:(NSString *)tag{
//打開數(shù)據(jù)庫
    FMDatabase *db = [self openOrCreate];
//執(zhí)行非查詢操作
    BOOL isSuccess = [db executeUpdate:sql];
//當(dāng)操作完成后,關(guān)閉數(shù)據(jù)路
    [self.db close];
    if (isSuccess) {
        NSLog(@"%@操作成功",tag);
        return YES;
    }else{
        NSLog(@"%@操作失敗",tag);
        return NO;
    }
}

FMDB之有返回結(jié)果集

  • SELECT命令就是查詢,執(zhí)行查詢的方法是以 -excuteQuery開頭的。
  • 執(zhí)行查詢時(shí),如果成功返回FMResultSet對(duì)象, 錯(cuò)誤返回nil. 與執(zhí)行更新相當(dāng),支持使用 NSError**參數(shù)。同時(shí),你也可以使用 -lastErrorCode和-lastErrorMessage獲知錯(cuò)誤信息。
  • 為了遍歷查詢結(jié)果,你可以使用while循環(huán)。你還需要知道怎么跳到下一個(gè)記錄。使用FMDB,很簡(jiǎn)單實(shí)現(xiàn)。

示例代碼

- (NSArray *)queryWithSql:(NSString *)sql{
//打開數(shù)據(jù)庫
    FMDatabase *db = [self openOrCreate];
//執(zhí)行sql語句,將返回結(jié)果先暫存到resultSet中
    FMResultSet *resultSet = [db executeQuery:sql];
//從resultSet中取出每一條記錄
    NSMutableArray *array = [NSMutableArray array];
    while ([resultSet next]) {//next:判斷sqlite3_step(stament) == row
        NSMutableDictionary *dic = [NSMutableDictionary dictionary];
/*每次執(zhí)行while循環(huán)的時(shí)候,都是一個(gè)新的記錄被取出,所以我們需要一個(gè)新的字典來盛放新的記錄,
所以每次進(jìn)while循環(huán)的時(shí)候都需要構(gòu)建一個(gè)新的字典對(duì)象。*/
        NSString *name = [resultSet stringForColumn:@"name"];
        NSString *gender = [resultSet stringForColumn:@"gender"];
        NSInteger age = [resultSet intForColumn:@"age"];
    
        [dic setValue:name forKey:@"name"];
        [dic setValue:gender forKey:@"gender"];
        [dic setValue:@(age) forKey:@"age"];
        [array addObject:dic];
    }
//釋放resultSet
    [resultSet close];
//關(guān)閉數(shù)據(jù)庫
    [db close];
    return array;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮(zhèn)少爺閱讀 3,966評(píng)論 0 8
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,276評(píng)論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評(píng)論 19 139
  • 華為的人力資源增值注重"人力資本增值最大化,人力成本最小化",在實(shí)踐中做到了關(guān)注人才動(dòng)態(tài)配置,關(guān)注人才質(zhì)量,關(guān)注人...
    無敵可愛ccc閱讀 573評(píng)論 0 0

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