Вопрос о SQLite3 и обновлении приложения для iPhone

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

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

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

2 ответа

Один из способов сделать это - проверить во время запуска, если в таблице есть новое поле. Вы можете использовать следующую команду 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;
}

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


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

licensed under cc by-sa 3.0 with attribution.