对于FMDatabase的使用,在查询这方面遇到了一点问题,想了很久还是没有想出个所以然来,希望各位大大能给点提示!问题如下:
我写了一个select函数,
- (NSMutableArray *)select:(NSString *)column{
    NSMutableArray *result = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];   //FMDatabase *db;db在头文件中声明的,是一个FMDatabase对象,能确定的是我的数据库里的coupon_table里是有数据的    FMResultSet *rs = [db executeQuery:@"select %@ from coupon_table",column];    NSLog(@"rs = %@",rs);
    //这里打印的结果为rs = (null),所以导致没有进入while循环中,所以result可变数组的值为result = ();    while ([rs next]) {        [result addObject:[rs stringForColumn:column]];
        //之所以要用addObject是为了把表中的相关字段的值取出来,写到数组中,以便要用的时候直接操作数组就行了    }
    [rs close];
    NSLog(@"result = %@", result);
    //这边打印的结果是result = ()
    return result;
}调用这个函数是在另一个文件夹中:
[couSql select:@"id"];
//这里的couSql对象是包含了select函数文件所在类的对象。
之前的版本是- (NSMutableArray *)select,没有加参数。这种情况下,result是有值的,能取到表里的我要的数据。但是那种情况是写死了,这样不好。所以改加一个参数,结果就悲催了。我也试过用FMResultSet *rs = [db executeQuery:@"select ? from coupon_table",column];这种形式,这样的话,rs能指向正确的内存位置,但是执行到[result addObject:[rs stringForColumn:column]];就crash掉了。不知道你们是否遇到过这种情况,求帮助呀!

解决方案 »

  1.   

    FMResultSet *rs = [db executeQuery:@"select %@ from coupon_table",column];个人感觉这句话有问题,可不可以先:NSString *sql = [NSString stringWithFormat:@"select %@ from coupon_table", column];
    然后再
    FMResultSet *rs = [db executeQuery:sql];没用过fmdatabase, 所以不知道executeQuery这个方法支持不支持你写的fomart形式,仅提供个思路!祝楼主早日解决问题!
      

  2.   

    不用写死了吧,NSString *sql = [NSString stringWithFormat:@"select %@ from coupon_table", column];
    FMResultSet *rs = [db executeQuery:sql];像这样就可以的吧
      

  3.   

    试用了一下fmdatabase,你这里FMResultSet *rs = [db executeQuery:@"select ? from coupon_table",column];这种形式要改成:FMResultSet *rs = [db executeQuery:@"select ? from coupon_table",column, nil];这样就可以了
      

  4.   

    大哥,为什么很多方法后面跟的参数要加nil啊?
      

  5.   

    因为这个接口时多参数的,你需要加上nil 作为结束符