使用现有数据更新预装数据库

4
我有一个在play store上线的应用程序。它带有预加载的数据库,存储在assets文件夹中。当用户初次启动应用程序时,该数据库会被复制到首选文件夹中。
其中有一个收藏夹表格,用户可以将他们喜欢的记录存储在其中。
我对打包数据库进行了一些修改并添加了新数据,我将上传新的APK到play store。
我的担心是,当前使用我的应用程序的用户将得到更新通知,并在更新后使用新的打包数据库,而且会丢失他们存储在收藏夹中的记录。
我在谷歌上查询了一下,在SQLiteHelper onUpgrade()中适用于创建运行时数据库,但在我的情况下,它是预加载的打包数据库。
我该如何在更新之前备份收藏夹数据,然后将其加载回新的数据库文件中。
谢谢。
1个回答

4
在更新的版本中,您应该保留要保留的表格数据。为此,您可以:
  1. 将旧数据库文件复制到备份中。
  2. 将最新的数据库文件提取到工作目录中。
  3. 打开两个SQLiteDatabase对象,一个用于每个数据库文件。
  4. 复制要保留的表中的所有数据。
  5. 如果一切顺利,删除旧文件的备份。
对于第4步,您甚至不需要特别编写代码,可以为每个表格执行操作,例如以下代码(注意,此代码未经过测试):
static void copyTable(SQLiteDatabase source, SQLiteDatabase destination, String tableName)
{
    Cursor c = source.query(tableName, null, null, null, null, null, null);

    destination.beginTransaction();
    try
    {
        String[] columns = c.getColumnNames();
        ContentValues insertValues = new ContentValues();
        while (c.moveToNext())
        {
            insertValues.clear();
            for (int i = 0; i < columns.length; i++)
                insertValues.put(columns[i], c.getString(i));

            destination.insert(tableName, null, insertValues);
        }

        destination.setTransactionSuccessful();
    }
    finally
    {
        destination.endTransaction();
    }

    c.close();
}

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