我在Google Play商店上传了一张apk(版本1.0),其中包含22个表格,位于 SQLite数据库中。
现在我想在应用程序的新版本(版本2.0)中使用36个表更新数据库。
我将
datebase
存储在默认位置,因此当我按“清除时 应用程序管理器中的数据“,数据库将被删除。
我只想知道在用户更新新版本时如何删除旧数据库(与清除数据相同)?
如果在从Play商店更新应用程序时有任何清除数据的解决方案,那么也回答了我。
我们将不胜感激。
感谢。
答案 0 :(得分:7)
您可以使用此method删除数据库。
context.deleteDatabase(DATABASE_NAME);
您也可以先使用此method查找数据库路径,然后将其删除。
File myDb = context.getDatabasePath(DATABSE_NAME);
Boolean isDelete = myDb.delete();
另一种解决方案是,如果要更新数据库,则只需更改数据库的版本号。 onUpgrade()
将自动被调用,旧数据库将被删除,新数据库将被创建。
答案 1 :(得分:3)
最后用简单的解决方案完成:
/** UPGRADE DATABASE **/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "Database Version: OLD: "+ oldVersion + " = NEW: "+newVersion);
if(context.deleteDatabase(DATABASE_NAME))
Log.i(TAG, "Database Deleted....");
else
Log.i(TAG, "Database Not Deleted..");
}
答案 2 :(得分:2)
好问题。只需按照步骤操作即可。
1)您在Helper类上重写了两种方法
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(oldVersion!=newVersion){
// Remove all old tables and crate new ones
}
}
2)创建一个Helper类的对象。
MyOpenHelper dbHelper = new MyOpenHelper(this,"dbname", 1);
3)现在只需要在更改数据库时增加database version
。(MyOpenHelper类中的第三个参数。" 1"是数据库版本)。
4)当数据库版本发生变化时,它将以onUograde()
方法为您提供回调。
5)删除onUpgrade()
方法中的所有表并创建新表。
6)那就是它。
说明:
您的应用version 1.1
正在进行Google Play和database version is "1"
。现在您要使用新数据库上载1.2版。只需设置数据库版本" 2"在您的帮助文件中。如果两者不相同,则检查 oldVersion 和 newVersion ,这意味着应用程序更新并删除旧表并创建新表。
答案 3 :(得分:1)
如果您使用SQLiteOpenHelper
,只需删除onUpgrade
方法中的表格,然后重新创建所有表格。你应该没有任何问题。
检查this。
希望有所帮助
注意:请注意数据库版本,如果您正在使用数据库编号,请确保使用正确的数字oldVersion
,否则在更新Google Play时它将无法正常运行。
答案 4 :(得分:0)
显而易见的解决方案是在调用onUpgrade()时删除旧的DB文件,然后复制新版本。太糟糕了,它不起作用。您会收到类似以下的错误:
由以下原因导致:android.database.sqlite.SQLiteReadOnlyDatabaseException:尝试编写只读数据库(代码1032)
SQLiteLog:(1032)语句在4处中止:[PRAGMA user_version = 2] 打开时取消链接的SQLiteLog:(28)文件:/data/data/my.package/databases/my_db.db
您不需要删除数据库,只需使用您已定义的方法(copyDataBase)复制数据库,如下所示:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Toast.makeText(myContext, "onUpgrade called!", Toast.LENGTH_LONG).show();
if (oldVersion < newVersion) {
Log.v("Database Upgrade", "Database version higher, upgrading");
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error upgrading database");
}
}
}
为我忙,谢谢