Вопрос о SQLite3 и обновлении приложения для iPhone - PullRequest
4 голосов
/ 29 июня 2011

Рассмотрим следующий сценарий.

У меня есть приложение для iPhone в магазине приложений, которое выполняет запросы к 16-колоночной таблице SQLite3.В качестве обновления я хочу добавить новый столбец в эту таблицу.

Когда кто-нибудь установит обновление, оно испортится?Будет ли заменен стол?Как это работает.Как мне справиться с этим?

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Один из способов сделать это - проверить во время запуска, есть ли у таблицы новое поле. Вы можете использовать следующую команду SQLite для извлечения всех полей из таблицы

PRAGMA table_info(table-name);

Если искомого поля нет в наборе результатов, выполните ALTER TABLE table-name ADD COLUMN column-name column-type, чтобы обновить таблицу.

Вы можете использовать этот метод для циклического обхода полей таблицы

- (BOOL)getFields
{
    const char *sql = "PRAGMA table_info(myTable)";
    sqlite3_stmt *stmt;

    if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK)
    {
        return NO;
    }

    while(sqlite3_step(stmt) == SQLITE_ROW)
    {
        NSString *fieldName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, 1)];
        NSLog(@"%@", fieldName);
    }

    return YES;
}

Надеюсь, это поможет

1 голос
/ 30 июня 2011

К вашему сведению, если вы никогда не копировали базу данных, чтобы сделать ее редактируемой, она будет заменена. Если вы скопировали БД куда-то, что доступно для записи, то вам придется заняться заменой самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...