Я создаю кроссплатформенное приложение HTML/Javascript для iOS и Android, используя PhoneGap и jQueryMobile, и я обновляю свое приложение (среди прочего) несколькими новыми полями в одной таблице локальной базы данных (localdatabase/websql).
Задача Я хочу убедиться, что при расширении базы данных новыми полями таблицы существующие пользовательские данные не будут удалены или заблокированы в недоступной старой версии базы данных.
Предыстория: в моем приложении есть локальная база данных пользователя (доходы и расходы, а также несколько настроек). Эти данные должны быть постоянными, и когда я начинал, я использовал функциональность HTML5 localDatabase, поскольку она является постоянной и доступна для браузеров iOS и Android, а также для большинства настольных браузеров.
Я использую плагин/библиотеку/штуку Javascript под названием persistenceJS, чтобы немного упростить работу с локальной базой данных. Но мой вопрос на самом деле не относится к persistenceJS.
Я работаю над новой версией приложения, в которой используются несколько новых полей в таблице настроек. Поэтому, когда эти пользователи загружают новое приложение и запускают его, оно должно проверить, содержит ли их таблица настроек это поле или нет, и если нет, оно должно создать это поле.
Как мне сделать это тестирование? Я вижу два направления мысли:
Используйте метку базы данных... которая используется в функции openDatabase. Кажется, это используется некоторыми разработчиками для хранения номера версии. Моя проблема с этой опцией заключается в том, что я знаю, как использовать openDatabase только для того, чтобы открыть базу данных (и создать новую, если ее не существует) и запустить обратный вызов, если база данных еще не существует. Итак, если я открою таблицу, указав в метке что-то вроде «v2», будет ли создана новая таблица? Если да, то скопирует ли он значения старой таблицы в новую?
Проверьте наличие полей таблицы... Я мог бы использовать openDatabase, а затем проверить наличие полей таблицы. Если их нет, я могу их добавить. Тест будет запускаться каждый раз, когда пользователь открывает свое приложение, что кажется немного примитивным.
Между прочим: я знаю, что webSQL/localDb устарела повелителями, но это все еще мой инструмент, и я хочу пока придерживаться его.