2012-04-18 5 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]; 
} 
関連する問題