美文网首页
iOS FMDB有返回结果集和无返回结果集

iOS FMDB有返回结果集和无返回结果集

作者: Joker_King | 来源:发表于2016-04-28 19:40 被阅读539次

    准备工作

    在当前类的延展中声明一个数据库的对象

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

    创建一个数据库的路径

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

    打开或者创建一个数据库

    - (FMDatabase *)openOrCreate{
        //创建数据库对象
        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之无返回结果集

    一切不是SELECT命令的命令都视为更新。这包括 CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE (等)。简单来说,只要不是以SELECT开头的命令都是UPDATE命令,也就是无返回结果集。
    示例代码

    - (BOOL)opertationNoResultWithSql:(NSString *)sql operationTag:(NSString *)tag{
    //打开数据库
        FMDatabase *db = [self openOrCreate];
    //执行非查询操作
        BOOL isSuccess = [db executeUpdate:sql];
    //当操作完成后,关闭数据路
        [self.db close];
        if (isSuccess) {
            NSLog(@"%@操作成功",tag);
            return YES;
        }else{
            NSLog(@"%@操作失败",tag);
            return NO;
        }
    }
    

    FMDB之有返回结果集

    • SELECT命令就是查询,执行查询的方法是以 -excuteQuery开头的。
    • 执行查询时,如果成功返回FMResultSet对象, 错误返回nil. 与执行更新相当,支持使用 NSError**参数。同时,你也可以使用 -lastErrorCode和-lastErrorMessage获知错误信息。
    • 为了遍历查询结果,你可以使用while循环。你还需要知道怎么跳到下一个记录。使用FMDB,很简单实现。

    示例代码

    - (NSArray *)queryWithSql:(NSString *)sql{
    //打开数据库
        FMDatabase *db = [self openOrCreate];
    //执行sql语句,将返回结果先暂存到resultSet中
        FMResultSet *resultSet = [db executeQuery:sql];
    //从resultSet中取出每一条记录
        NSMutableArray *array = [NSMutableArray array];
        while ([resultSet next]) {//next:判断sqlite3_step(stament) == row
            NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    /*每次执行while循环的时候,都是一个新的记录被取出,所以我们需要一个新的字典来盛放新的记录,
    所以每次进while循环的时候都需要构建一个新的字典对象。*/
            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];
    //关闭数据库
        [db close];
        return array;
    }
    

    相关文章

      网友评论

          本文标题:iOS FMDB有返回结果集和无返回结果集

          本文链接:https://www.haomeiwen.com/subject/ctocrttx.html