安卓如何处理应用程序更新和数据库变更

13

我基本上已经开发完了一个使用SQLite数据库的Android应用程序,将其复制到设备上的用户数据区域,例如 /data/data/com.company.app/databases/users.db

我不确定市场应用更新过程如何进行,也不确定如何测试它。

我目前检查设备上是否存在数据库,如果不存在则复制它(通常仅在首次启动时发生)。如果我有一个新版本的数据库在我的更新后的应用程序中会发生什么?市场更新是否会清除用户数据,以便在下一次启动时将我的新数据库复制进去?

如果我对数据库进行更改/添加记录等操作,并将其与新应用程序一起打包,将会发生什么?这个数据库会不会覆盖旧的数据库?

否则,为避免在每次启动时从应用程序包中复制和覆盖数据库,是否有一种方法来检查数据库文件的大小和日期,并且只有当捆绑的数据库是更新版本时才进行复制?

如果需要澄清,请提问。

1个回答

13

我在做类似的事情。我设置了数据库版本,然后当我检查数据库是否存在时,我还要确保它是正确的版本。如果不是,我会从数据库中保存用户喜爱的内容,清除并重新复制我的数据库,然后再把用户喜爱的内容放回去。

这是我的升级操作:

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion == 2) {

        System.out.println("Performing upgrade!");
        openDataBase();
        // save the old favorites
        Cursor mCursor = getFavorites();
        ArrayList<Stop> favs = allCursorToStops(mCursor);
        mCursor.close();

        deleteRecreate(db);

        openDataBase();

        for (int i = 0; i < favs.size(); i++)
            setFavorite(favs.get(i));

        close();

    } else {

        deleteRecreate(db);

    }
}

这里是我检查存在性/是否需要升级等的地方

    boolean dbExist = checkDataBase();

    if(dbExist){
        // check if we need to upgrade
        openDataBase();
        int cVersion = myDataBase.getVersion();
        close();
        if(cVersion != VERSION)
            onUpgrade(myDataBase, myDataBase.getVersion(), VERSION);

1
而 onUpgrade(..) 方法如何被调用? - Nativ
@powerX 当你增加数据库版本号时,onUpgrade 会自动调用。 - ariets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接