我知道有很多类似的问题,我希望不要重复,但我尝试了不同的事情,我仍然无法解决问题。我正在开发一个Android应用程序,它使用SQLite在内部存储一些数据。我一直在自己的手机上使用这个应用程序一个月,我添加了许多我不想丢失的数据,但同时我一直在改进我的计算机中的应用程序,但改进使我改变了一些列名,添加一些列和表。所以,现在我想更新手机中的应用程序。
以前的版本将数据库设置为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? p>