Прежде всего, вы можете не захотеть думать о выполнении чего-либо во время обновления, потому что это невозможно. Как и @lxt, вы можете сохранить значение в настройке, чтобы указать версию базы данных, но оно может быть не пуленепробиваемым.
Распространенным подходом к решению этой проблемы является использование самодельных метаданных. Когда вы впервые создали базу данных, вы должны создать дополнительную таблицу с именем "metadata"
или "properties"
с двумя столбцами varchar, "name"
и "value"
. Вы вставляете одну строку, ("database_ver", "1")
.
В своем классе слоя базы данных (или адаптера) вы создаете метод "open" для обработки открытия. В рамках этого метода вы сначала запускаете select database_ver from metadata;
, чтобы проверить версию базы данных. Если ничего не получено, вы запускаете сценарии создания таблицы и вставляете database_ver = 1 строку.
Позже, если вы обновили формат таблицы, предоставьте операторы alter table
для каждой версии и запустите их на основе database_ver
. Для установок после обновления вы можете использовать обновленные операторы create table
, а затем установить "database_ver"
на "2"
(или выше) напрямую, не пропуская alter table
.
По сравнению с сохранением значения в предпочтении, на самом деле чаще хранить его в самой базе данных. Потому что, даже если пользователь создал резервную копию файла или пропустил версию, вы все равно можете определить формат базы данных по таблице метаданных.
У FMDB нет проблем с запуском такого механизма.