База данных Sqlite внезапно закрылась на устройствах, использующих MDM в приложении Native Android

Наше приложение для 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=?

Это не всегда воспроизводимо, но как только это происходит, с этого момента приложение не может открыть базу данных, даже если она существует в памяти телефона. Нам удалось извлечь базу данных из уязвимого устройства и мы обнаружили, что таблица 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() запускает команды изменения таблицы / добавления таблицы.

0 ответов

Другие вопросы по тегам