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

准备工作

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

@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有返回结果集和无返回结果集)