2012-11-28 28 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