首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

FMDatabase库中数据库的查询,该如何处理

2012-04-06 
FMDatabase库中数据库的查询对于FMDatabase的使用,在查询这方面遇到了一点问题,想了很久还是没有想出个所

FMDatabase库中数据库的查询
对于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掉了。不知道你们是否遇到过这种情况,求帮助呀!

[解决办法]
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形式,仅提供个思路!祝楼主早日解决问题!

热点排行