iPhone和iPad:在SQLite数据库中执行“select * from something”查询

时间:2011-01-29 15:13:31

标签: iphone ipad sqlite

我正在尝试在我的iPad应用程序中使用SQLite数据库,这是我的查询功能:

- (void)executeQuery:(char*)query
{
    NSString *file = [self getWritableDBPath];
 NSFileManager *fileManager = [NSFileManager defaultManager];
 BOOL success = [fileManager fileExistsAtPath:file]; 

 // If its not a local copy set it to the bundle copy
 if(!success) {
  //file = [[NSBundle mainBundle] pathForResource:DATABASE_TITLE ofType:@"db"];
  [self createEditableCopyOfDatabaseIfNeeded];
 }

 dataArray = NULL;
 dataArray = [NSMutableArray array];

    sqlite3 *database = NULL;
    if (sqlite3_open([file UTF8String], &database) == SQLITE_OK) {
        sqlite3_exec(database, query, loadTimesCallback, dataArray, NULL);
    }
    sqlite3_close(database);

    [self logResults];
}

如果我致电[self executeQuery:"select name from table1"];,一切正常。但是,如果我调用[self executeQuery:"select * from cars"];,应用程序崩溃,告诉我NSMutableArray dataArray不是正确的变量,可以在哪里设置查询结果。

那么,我该如何进行“select * form table1”查询,并存储结果?

谢谢!

编辑:这是我的loadTimesCallback方法:

static int loadTimesCallback(void *context, int count, char **values, char **columns)
{
    NSMutableArray *times = (NSMutableArray *)context;
    for (int i=0; i < count; i++) {
        const char *nameCString = values[i];
        [times addObject:[NSString stringWithUTF8String:nameCString]];
    }
    return SQLITE_OK;
}

1 个答案:

答案 0 :(得分:1)

我跟着this tutorial(看第五段)我解决了所有问题