2

我知道有很多类似的问题,我希望不要重复,但我尝试了不同的方法,但我仍然无法解决问题。我正在开发一个使用 SQLite 在内部存储一些数据的 Android 应用程序。我已经在自己的手机中使用这个应用程序一个月了,我添加了很多我不想丢失的数据,但同时我一直在改进我电脑中的应用程序,但是改进让我更改了一些列名,添加一些列和表。所以,现在我想更新我手机中的应用程序。

以前的版本将数据库设置为 2,新的设置为 3。此外,我的应用程序能够创建数据库的备份,只需将文件复制到 SD 卡,并能够通过替换内部数据库文件来恢复它对于用户从 sd 卡中选择的一个。现在的问题是,我从手机备份了数据库,然后将其移动到我的计算机上,以将其导入在模拟器中运行的新版本应用程序中,以确保应用程序可以在我安装之前按预期升级数据库我手机上的新版本。问题是 SQLiteOpenHelper 的 onUpgrade 永远不会被调用。我做了不同的试验,但没有任何效果。我可以确保手机中的数据库具有版本 2(我使用 sqliteadmin "PRAGMA user_version;" SQL 查询和答案 2)并且我的应用程序会查找版本 3。

这里有导入备份时执行的代码:

private boolean importDatabase(String path) {  
    String dbPath = mDbHelper.getDbPath();  
    mDbHelper.close();  

    boolean result = copyFile(path, dbPath);  

    if (result) {  
        mDbHelper = new DbHelper(this);  
        mDbHelper.getWritableDatabase().close();  
    }  
    return result;  
}  

我还必须提到,当用户到达在新版本中导入/导出数据库的位置时,已创建一个版本 3 的新空数据库,因为应用程序需要来自声明活动的活动数据库。然后,在导入时,这个空的数据库文件被导入的文件替换。我想知道是否有任何我想清理的缓存数据。

你能给我一些线索来理解为什么在这种情况下永远不会调用 onUpgrade 吗?

4

0 回答 0