2

我正在开发一个数据库应用程序,但我被困在一个地方。

场景是:我有一个数据库,我正在维护数据库的版本。与应用程序版本相同。

现在我在版本 1 中实现数据库。在版本 1 中创建了 3 个表。在版本 2 中,我通过添加一个表来升级数据库。因此,查询在 upgrade() 中。

现在,如果用户安装了版本 2。onUpgrade() 不会被调用,因为没有数据库。因此,onCreate() 将被调用,结果将是它只会创建 3 个表。

我正在考虑在 onCreate() 中显式调用 onUpgrade()。但是stackoverflow上的很多开发者都建议不要显式调用它。

我完全被困住了。

提前致谢。

4

1 回答 1

0

我知道这是一篇旧帖子,您肯定已经找到了解决方案,但我发现这个问题有效(赞成)并且由于它没有收到答案,这是我的 2 美分:

调用onUpgrade()fromonCreate()应该可以工作(我没有测试它),但是有一个更好的方法来组织你的助手(见下文的片段)。关键是这两种方法都只是入口点。

public class SampleDBHelper extends SQLiteOpenHelper {

    private static final String DB_NAME = "mydatabase";
    private static final int DB_VERSION = 2;

    public SampleDBHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        updateDatabase(db, 0, DB_VERSION);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        updateDatabase(db, oldVersion, newVersion);
    }

    private void updateDatabase(SQLiteDatabase db, int oldVersion, int newVersion) {
        if (oldVersion < 1) {
            // Create 3 initial tables
        }
        if (oldVersion < 2) {
            // Create the new table
        }
    }

}

这种帮手的优点:

  • 你永远不需要改变onCreate()onUpgrade()方法,只需要updateDatabase().
  • 对于每个新版本,您只需要:
    • 增加 DB_VERSION
    • 添加一个新部分if (oldVersion < N) { // do the upgrade }

学分:受到Head First Android Development的强烈启发,Dawn 和 David Griffiths,O'Reilly,2015

于 2016-11-30T11:38:18.593 回答