Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何将sqlite3_stmt返回到被调用的对象_Iphone_Ios_Sqlite - Fatal编程技术网

Iphone 如何将sqlite3_stmt返回到被调用的对象

Iphone 如何将sqlite3_stmt返回到被调用的对象,iphone,ios,sqlite,Iphone,Ios,Sqlite,我正在开发一款iPhone应用程序。我创建了一个可重用的类,其中编写了sqlite getData方法。我想从我的控制器传递一条sql语句,并想得到一个包含所有行的数组 我是否可以将sqlite3_stmt对象存储到数组中并返回该数组,以便在调用点转换它并找出每个列的值 我现在的代码是这样的: -(NSMutableArray*)getData:(NSString*) SqlQuery { // The Database is stoed in the application bundl

我正在开发一款iPhone应用程序。我创建了一个可重用的类,其中编写了sqlite getData方法。我想从我的控制器传递一条sql语句,并想得到一个包含所有行的数组

我是否可以将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]

我怎样才能做到这一点?有没有替代方案来实现这一点

谢谢

- (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];
}