Вот как я это делаю:
В своем коде я определяю версию базы данных
#define DB_VERSION 2
Этот номер версии увеличивается каждый раз, когда я изменяю код, который «разбивает» базу данных (вносит несовместимые изменения в схему или семантику содержимого базы данных)
Когда код создает новую базу данных, он выполняет эту команду SQL
QueryFormat(L"PRAGMA SCHEMA_VERSION = %d;",DB_VERSION);
Обратите внимание, что это должно быть ПОСЛЕ того, как были выполнены все команды CREATE TABLE, в противном случае sqlite увеличивает SCHEMA_VERSION.
Когда код открывает существующую базу данных, первое, что он делает, это
Query(L"PRAGMA schema_version;")
SCHEMA_VERSION, который возвращается из этого запроса, сравнивается с DB_VERSION. Если они не совпадают, то база данных была создана другой версией программного обеспечения. Что будет дальше, зависит от того, что вам нужно. Как правило:
база данных была создана более новым программным обеспечением: сообщите пользователю и выйдите
база данных была создана более старым программным обеспечением, для которого существует обновление: предложите пользователю возможность запустить код обновления или повторно инициализируйте базу данных
база данных была создана старым программным обеспечением без обновления: предложите пользователю возможность повторно инициализировать базу данных или выйти.
Детали того, как работает код обновления, очень сильно зависит от того, что вам нужно. В общем, откройте старую базу данных И откройте новую пустую базу. Прочитайте старые таблицы, преобразуйте данные, как требуется, и запишите в новую базу данных. Закройте базы данных. Удалить старую БД. Переименуйте новый БД в стандартное имя БД. Откройте новую базу данных.