【问题标题】:Upgrading DB in Android在 Android 中升级数据库
【发布时间】:2015-02-24 10:48:42
【问题描述】:

我知道升级方法是如何工作的,我在某些方面感到困惑:

1) 一开始我的数据库版本是 1,我的应用版本是 1。

2) 现在我将我的数据库版本升级到 2,我的应用版本是 2。

3) 我想将 DB 升级到 3,将 app 升级到 3。

问题:从应用版本 1 升级到应用版本 3 的用户会发生什么情况?他们会把 DB 升级到 2 再升级到 3 吗?还是我需要为此编写代码?我如何维护这样的标志?

【问题讨论】:

标签: android sqlite


【解决方案1】:

好吧,SQLiteOpenHelper.onUpgrade 将照常调用,最简单的处理方法是让您的升级代码逐步处理每个版本;从版本 1 -> 2 -> 3 等。例如:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion == 1) { // upgrade db to version 2 oldVersion = 2; } if (oldVersion == 2) { // upgrade db to version 3 oldVersion = 3; } }

【讨论】:

    【解决方案2】:

    通常,当数据库升级是增量时,您可以使用优雅的switch

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      switch( oldVersion ){
        case 1:
          migrateFrom1();
        case 2:
          migrateFrom2();
        case 3:
          migrateFrom3();
      }
    }
    

    注意break 语句的缺失。

    【讨论】:

    • 从什么时候开始切换优雅 LOL?而这个在每种情况下都没有休息或返回的特殊让我不寒而栗。
    • 我找到了一种优雅的方式here
    • @User3 我看不出这更优雅,它需要一段代码来处理新旧版本的每种组合。考虑一下这在版本 50 的数据库中会是什么样子。在我看来,在增量中逐步处理升级会更好、更清晰、更不容易出错(因为您实际上可以轻松测试所有案例)。
    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多