Android处理应用更新和数据库更改

时间:2010-10-14 02:28:33

标签: android database marketplace

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

我不确定市场应用更新程序是如何发生的,我也不确定如何测试它。

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

如果我进行数据库更改/添加记录/等并使用新应用程序打包,将来会发生什么?这个数据库会不会覆盖旧数据库吗?

否则,为了避免在每次启动时从应用程序包中复制和覆盖数据库,有没有办法检查数据库文件的大小和日期,只有在数据库中的数据库是新的时才复制?

如果有人需要澄清,请询问。

1 个答案:

答案 0 :(得分:12)

我正在做类似的事情。我所做的是设置数据库版本,然后当我检查数据库是否存在时,我还要确保它是正确的版本。如果不是,我会从数据库保存用户收藏夹,擦除并重新复制我的数据库,然后放回用户收藏夹。

这是我的升级版

    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);