4

我们的 android 应用程序被成千上万的用户使用,并且在过去的四年里一直在使用。该应用程序存储了数十万行,每天在许多不同的表中插入、更新和删除数千行。我们正在使用SQLCipher-Zetetic。最近,我们的一位客户开始面临他们在设备Samsung J3上使用的 MDM(SOTI) 软件的问题。在启用 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() 方法运行 alter table / add table 命令。

4

0 回答 0