如何用不同的数据库解决Android更新

时间:2017-11-13 04:17:46

标签: java android database android-studio google-play

我开发了一个已经存在GooglePlay的应用程序, 现在我需要修改数据库中需要更多列的一些部分。 但是我遇到了问题,问题是当我发布新的 APK 更多列到playstore时,我在数据库中找不到那些新列,但是当我卸载时首先,然后我安装新的 APK ,问题就消失了,

如何修复此错误?

1 个答案:

答案 0 :(得分:1)

您必须使用onUpgrade()方法来反映本地和实时应用程序中的更改。

onUpgrade()仅在数据库文件存在时调用,但存储的版本号低于构造函数中请求的版本号。 onUpgrade()应将表架构更新为请求的版本。

在代码(onCreate())中更改表模式时,应确保更新数据库。两种主要方法:

  1. 删除旧数据库文件,以便再次运行onCreate()。在开发时,您通常首选这种方法,您可以控制已安装的版本,并且数据丢失不是问题。删除数据库文件的一些方法:

    • 卸载应用程序。使用应用程序管理器或shell中的adb uninstall your.package.name

    • 清除申请数据。使用应用程序管理器。

  2. 增加数据库版本,以便调用onUpgrade()。由于需要更多代码,因此稍微复杂一些。

    • 对于数据丢失不成问题的开发时架构升级,您只需使用execSQL("DROP TABLE IF EXISTS <tablename>")删除现有表并调用onCreate()即可重新创建数据库。

    • 对于已发布的版本,您应该在onUpgrade()中实施数据迁移,这样您的用户就不会丢失数据。

  3. @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch(oldVersion){
            case 1:
                db.execSQL("ALTER TABLE " + DATABASE_TABLE + " ADD COLUMN " + NEW_COLUMN_NAME + TYPE);
        }
    } 
    

    检查SqlLiteOpenHelperthis explanation