我有一个Play商店在线上的应用程序。它带有一个预加载的数据库,该数据库 bundle 在Assets文件夹中,当用户最初启动该应用程序时,会将db复制到首选文件夹。

有一个收藏夹表,用户在其中存储有书签/收藏夹记录。

我有新数据,对 bundle 数据库进行了一些其他修改,并将上载新的APK到Play商店。

我担心的是,当前正在使用我的应用程序的用户将收到更新通知,并且一旦更新,其应用程序将使用新的 bundle 数据库,并且将丢失其收藏夹中存储的记录。

我在它上面做了一些谷歌搜索,当我们在运行时创建数据库时,SQLiteHelper onUpgrade()起作用了,但是在我的情况下,它是预加载的 bundle 数据库。

如何在更新之前备份收藏夹数据,然后将其重新加载到新的数据库文件中。

谢谢

最佳答案

在较新的版本中,应保留要保留的表数据。为此,您可以:

  • 将旧数据库文件的副本复制到备份中。
  • 将较新的数据库文件提取到工作目录
  • 打开两个 SQLiteDatabase对象,每个数据库文件一个。
  • 从要保留的表中复制所有数据。
  • 如果一切成功,请删除旧文件的备份。

  • 对于第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();
    }
    

    10-04 15:38
    查看更多