2012-11-28 46 views
2

我在我的一个iPhone项目中使用了SQLite的FMDB框架。 的代码如下:即它由用户给出在使用FMDB执行sqlite查询时遇到的问题

for (int i = 0; i < CatID.count; i++) 
{ 
    NSString *subCatId = [NSString stringWithFormat:@"SELECT * FROM expense 
    where CAT_ID = %@ AND CURR_ID = %@ 
    AND EXP_DATE BETWEEN '%@' AND '%@' ", 
    [CatID objectAtIndex:rowTrip], 
    [currID objectAtIndex:1], 
    _fromTextField.text, 
    _toTextField.text]; 

    FMResultSet *result = [database executeQuery:subCatId]; 

    while([result next]) 
    { 
     [_total addObject:[result stringForColumn:@"AMOUNT"]]; 
    } 

} 
  1. CatID是固定的。

  2. carrID被提取for循环并被查询。

每次在SQL查询之后,_total数组都会增加(添加新对象),但这是挂起的。

假设我们有"AMOUNT"输出为100,并且CatID.count时间对象被添加到_total数组中。请告诉我我在哪里做错了。

+0

1. CATID,它是一个数组? –

回答

2

执行SQL查询时,不要使用[NSString stringWithFormat:]方法。相反,只要按照原样使用查询并在[database executeQuery:]的字符串中传递参数即可。

尝试以下方法:

NSMutableArray* _total = [[NSMutableArray alloc] init]; 

for (int i = 0; i < [CatID count]; i++) 
{ 
    NSString *subCatId_QUERY = @"SELECT * FROM expense 
    where CAT_ID = %@ AND CURR_ID = %@ 
    AND EXP_DATE BETWEEN '%@' AND '%@' "; 


    NSNumber* rowTrip = [[CatID objectAtIndex:rowTrip] intValue]; 
    NSNumber* currID = [[currID objectAtIndex:1] intValue]; 

    NSString* fromDate = _fromTextField.text; 
    NSString* toDate = _toTextField.text; 

    FMResultSet *result = [database executeQuery:subCatId_QUERY,rowTrip,currID, fromDate, toDate]; 

    while([result next]) 
    { 
     [_total addObject:[result stringForColumn:@"AMOUNT"]]; //are you sure about this? string?? 
    } 

} 
+0

这对你有帮助吗? –

+1

是的帮助感谢美丽的答案。 – Deepak