Наше приложение для Android используется тысячами пользователей и работает в течение последних четырех лет. Приложение хранит сотни тысяч строк, где ежедневно вставляются, обновляются и удаляются тысячи различных таблиц. Мы используем SQLCipher - Zetetic . Недавно у одного из наших клиентов возникла проблема с программным обеспечением MDM (SOTI), которое они используют на своем устройстве Samsung J3 . На устройствах с поддержкой MDM иногда база данных закрывается или повреждена при выполнении операции с базой данных со следующим исключением:
Caused by net.sqlcipher.database.SQLiteException no such table: customer_record: , while compiling: SELECT record_id, record_branch_id, record_customer_id, status, description, start_date FROM customer_record WHERE is_synchronized=?
Это не всегда воспроизводимо, но как только это происходит, с этого момента приложение не может открыть базу данных, даже если она существует в памяти телефона. Нам удалось извлечь базу данных из уязвимого устройства и мы обнаружили, что таблица table_1008 * customer_record присутствует в базе данных.
Может ли это быть вызвано тем, что MDM ограничивает доступ к файлу? Если да - вопрос в том, почему он не воспроизводится последовательно?
Обновление
В методе onUpgrade () мы применяем изменения базы данных / схемы, которые включены в текущую версию, по сравнению с более ранними версиями следующим образом
public void onUpgrade(SQLiteDatabase pDb, int pOldVersion, int pNewVersion) {
switch (pOldVersion) {
case 5:// when moving from version 5 onward
dbVersion5(pDb);
case 6:// when moving from version 6 onward
dbVersion5(pDb);
}
} * * тысяча двадцать-один
Где метод dbVersionX () запускает команды изменения таблицы / добавления таблицы.