gpt4 book ai didi

android - 使用现有数据更新预加载的数据库

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:47 25 4
gpt4 key购买 nike

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

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

我有新的数据和一些其他的修改,我用 bundle 的数据库做了一些修改,并将上传新的 APK 到 Play 商店。

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

我对它进行了一些谷歌搜索,当我们在运行时创建数据库时,SQLiteHelper onUpgrade() 可以工作,但在我的例子中,它是预加载的 bundle 数据库。

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

谢谢

最佳答案

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

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

关于android - 使用现有数据更新预加载的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27536666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com