更新新版本的应用程序时删除sqlite数据库

时间:2014-05-27 04:56:02

标签: android database sqlite android-sqlite clear

我在Google Play商店上传了一张apk(版本1.0),其中包含22个表格,位于 SQLite数据库中。

现在我想在应用程序的新版本(版本2.0)中使用36个表更新数据库。

  

我将datebase存储在默认位置,因此当我按“清除时   应用程序管理器中的数据“,数据库将被删除。

我只想知道在用户更新新版本时如何删除旧数据库(与清除数据相同)?

更新

如果在从Play商店更新应用程序时有任何清除数据的解决方案,那么也回答了我。

我们将不胜感激。

感谢。

5 个答案:

答案 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"); 
        } 
    } 
}  

为我忙,谢谢