2012-04-18 7 views
0

저는 iPhone 응용 프로그램에서 작업하고 있습니다. 나는 sqlite getData 메소드가 작성된 재사용 가능한 클래스를 만들었다. 내 컨트롤러에서 SQL 문을 전달하고 모든 행을 가진 배열을 다시 가져 오려고합니다.개체 호출에 sqlite3_stmt를 반환하는 방법

배열에 저장된 sqlite3_stmt 객체를 가져올 수 있고 그 배열을 반환 할 수 있습니다. 따라서 호출 지점에서이를 캐스팅하고 각 열 값을 찾을 수 있습니까?

내 현재 코드가 같다 :

-(NSMutableArray*)getData:(NSString*) SqlQuery 
{  
// The Database is stoed in the application bundle 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"sqliteClasses.sqlite"]; 

if(sqlite3_open([path UTF8String], &contactDB) == SQLITE_OK) 
{ 
    const char *sql = (const char*)[SqlQuery UTF8String]; 
    sqlite3_stmt *compiledStatement; 

    if(sqlite3_prepare_v2(contactDB, sql, -1, &compiledStatement, NULL) == SQLITE_OK) 
    { 
     // Loop through the results and add them to the feeds array 
     while (sqlite3_step(compiledStatement) == SQLITE_ROW)//(stepResult == SQLITE_ROW) 
     { 
      // [arrayRecords addObject:compiledStatement];     
     } 
    }  
    sqlite3_finalize(compiledStatement);   
} 
sqlite3_close(contactDB); 
return arrayRecords; 

}

에러 라인 [arrayRecords addObject : compiledStatement];

어떻게하면됩니까? 이것을 구현하기위한 대안은 무엇입니까?

감사합니다.

답변

0
- (NSArray *) getActionWithFilters:(NSDictionary *)dictionary ClassName:(NSString *)className Error:(NSError **)error{ 
    NSString *query = [NSString stringWithFormat:@"SELECT * FROM %@ %@",className,[self getFitlerArrayByDictionary:dictionary]]; 
    sqlite3_stmt *statement = [self getItemsWithQuery:query]; 

    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    while (sqlite3_step(statement) == SQLITE_ROW) { 
     NSMutableDictionary *itemDic = [[NSMutableDictionary alloc] init]; 
     int columns = sqlite3_column_count(statement); 
     for (int i=0; i<columns; i++) { 
      char *name = (char *)sqlite3_column_name(statement, i); 
      NSString *key = [NSString stringWithUTF8String:name]; 
      switch (sqlite3_column_type(statement, i)) { 
       case SQLITE_INTEGER:{ 
        int num = sqlite3_column_int(statement, i); 
        [itemDic setValue:[NSNumber numberWithInt:num] forKey:key]; 
       } 
        break; 
       case SQLITE_FLOAT:{ 
        float num = sqlite3_column_double(statement, i); 
        [itemDic setValue:[NSNumber numberWithFloat:num] forKey:key]; 
       } 
        break; 
       case SQLITE3_TEXT:{ 
        char *text = (char *)sqlite3_column_text(statement, i); 
        [itemDic setValue:[NSString stringWithUTF8String:text] forKey:key]; 
       } 
        break; 
       case SQLITE_BLOB:{ 
        //Need to implement 
        [itemDic setValue:@"binary" forKey:key]; 
       } 
        break; 
       case SQLITE_NULL:{ 
        [itemDic setValue:[NSNull null] forKey:key]; 
       } 
       default: 
        break; 
      } 
     } 
     [array addObject:itemDic]; 
     [itemDic release]; 
    } 

    return [array autorelease]; 
} 
관련 문제