Проблема чтения SQLite - PullRequest
       6

Проблема чтения SQLite

1 голос
/ 27 февраля 2010

У меня есть NSTableView с двумя столбцами, и я хочу заполнить их записи из базы данных SQLite.

этот метод является запросом для таблицы

-(void)getPersons
{

    NSString *file = [[NSBundle mainBundle] pathForResource:@"persons" ofType:@"db"];
    sqlite3 *database = NULL;
    if (sqlite3_open([file UTF8String], &database)==SQLITE_OK)
    {
        NSLog(@"i open database");
        sqlite3_exec(database, "select name,age from persons", MyCallback, persons, NULL);

    }
    sqlite3_close(database);
}

проблема возникает в методе MyCallback:

static int MyCallback(void *context, int count, char **values, char **columns)
{
    NSMutableArray *persons = (NSMutableArray *)context;

    for (int i=0; i < count; i++) {

        NSString *columnname = [NSString stringWithUTF8String:columns[i]];
        const char *nameCString = values[i];

            if ([columnname isEqualTo:@"name"]) {
                [persons addObject:[NSString stringWithUTF8String:nameCString]];
            }
        else {
            [ages addObject:[NSString stringWithUTF8String:nameCString]];
        }

    }
    return SQLITE_OK;
}

как я могу записать записи "age" в возраст NSMutableArray, если я могу назначить * контекст только для одного NSMutableArray? (в этом коде это NSMutableArray * person)

Конечно, я должен создать отдельный метод для получения записей возраста?

спасибо.

1 Ответ

1 голос
/ 11 марта 2010

Во многих простых случаях , как и в вашем вопросе, удобно использовать наиболее естественное представление таблиц в массиве target-c: словарь. Таблица - это индексированная коллекция записей - так что это массив, а каждая запись - коллекция пар ключ-значение - так что это словарь. И вам не нужно менять код при изменении имен столбцов или даже количества столбцов.

...
NSMutableArray *allRecords= (NSMutableArray *)context;
NSString *columnName;
NSString *columnValue;
NSMutableDictionary * record = [NSMutableDictionary dictionary];
for (int i=0; i < count; i++) {
  columnName = [NSString stringWithUTF8String:columns[i]];
  if (values[i]){
    columnValue = [NSString stringWithUTF8String:values[i]];
  }
  else{
    columnValue = @"";
  }
  [record setObject:columnValue forKey:columnName]; 
}
[allRecords addObject:record];
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...