【发布时间】:2015-08-04 07:48:36
【问题描述】:
我已经预加载了位于 assets 中的 sqlite 数据库,在首次安装应用程序后将其复制到默认数据库位置。我想在每次应用更新时执行此程序。 我不需要保留现有数据库中的任何用户数据。
应用更新时如何删除旧的数据库文件?
【问题讨论】:
-
优先管理应用版本,if(appver
我已经预加载了位于 assets 中的 sqlite 数据库,在首次安装应用程序后将其复制到默认数据库位置。我想在每次应用更新时执行此程序。 我不需要保留现有数据库中的任何用户数据。
应用更新时如何删除旧的数据库文件?
【问题讨论】:
这实际上是两个问题:
您可以将带有最新版本代码的变量保存在共享首选项中。每次启动应用程序后,您都会使用保存的代码检查当前代码。如果它们不匹配,那就是更新,你执行了一些代码。
如果数据库已关闭,您可以简单地删除该文件。使用Context.getDatabasePath(String) 查找文件的位置,使用File.delete() 删除它。确保没有进程正在访问数据库文件。如果是这样,您可能需要使用File.deleteOnExit() 并强制重新启动应用程序。
【讨论】:
使用SQLiteOpenHelper类的onUpgrade()方法。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Delete old table
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
// Re-create table
onCreate(db);
}
【讨论】: