【问题标题】:How to solve Android Update with Different Database如何使用不同的数据库解决 Android 更新问题
【发布时间】:2018-04-25 16:51:17
【问题描述】:

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

如何修复这个错误?

【问题讨论】:

  • 可以使用 SQLiteOpenHelper 的 onUpgrade 方法。因为您必须更改表或删除表,然后为使用先前版本应用程序的人创建新表。您还必须更新数据库版本。

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


【解决方案1】:

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

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

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

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

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

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

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

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

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


@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2020-01-29
    • 2021-05-06
    • 2021-10-15
    相关资源
    最近更新 更多