如何使用SQLiteAssetHelper使用新行升级数据库版本

时间:2017-02-21 06:49:46

标签: android sqlite upgrade

我开发了一个教程应用程序,其中我已经保存了500多个问题和答案。 他们是另一张叫做收藏的桌子。这是供用户输入的。 现在,我想用新的问题和答案更新我的应用程序。 但我不想删除收藏夹表的数据(如果用户已经标记了一些问题收藏夹,那么这些问题不应该从收藏夹中删除)

所以我该怎么办? 因为,我已经使用SQLassethelper库进行数据库连接。

我的旧数据库包含:

  1. 数据表(静态表)
  2. 收藏夹表(本地表)
  3. 所以,根据sqliteassethelper文档,我添加了我的新数据库: 包含:更新的数据表。我没有在这里插入收藏夹表,因为它将在脚本文件中创建。 并将该数据库存储在资产>>数据库文件夹中。

    然后 我创建了一个脚本fild db.db_upgrade_1-2.sql

    alter table "favourites" rename to "favourites_tmp";
    create table "favourites" (
    "id" Integer not null primary key autoincrement unique,
    "question" text,
    "answer" text,
    "category" text,
    "catid" integer
    );
    insert into "favourites" ("id","question","answer","category","catid") select from "favourites_tmp" "id","question","answer","category","catid" from "favourites_tmp";
    drop table "favourites_tmp";
    

    所以我认为这里将使用旧数据创建收藏夹表格。 但 当我运行该项目时,它说:没有这样的标签收藏。

2 个答案:

答案 0 :(得分:2)

documentation告诉您

  

创建一个文本文件,其中包含所有必需的SQL命令,以将数据库从其先前版本升级到其当前版本。

您可以使用任何 SQL命令,不仅可以使用ALTER TABLE,还可以使用INSERT。

仅当没有旧数据时(如果首次安装该应用程序),才会使用assets文件夹中的数据库文件。如果存在旧数据,则SQLiteAssetHelper会执行SQL升级脚本。

SQLiteAssetHelper项目包含an example,它显示了这样一个脚本的样子。

要将数据保存在收藏夹表中,您无需执行任何操作。 要添加新问题/答案,请使用一堆INSERT语句。 (有关如何获取这些INSERT语句,请参阅How to compare two SQLite databases。)

答案 1 :(得分:0)

最后我得到了我的问题的答案。 正如我所说,我正在使用SQLiteAssetHelper库。 现在我想添加新记录,并希望发布更新版本。 所以我找到了可以在资产文件夹中存储新更新数据库的功能。这个库将更新用户手机中的旧数据库。在旧数据库中保留特定表。

但目前这个库并没有提供这样的功能。 升级脚本只能用于更改旧数据库。我们可以添加新的更新数据库并从新数据库中复制数据。

如果我们想要添加新数据,也不想删除本地数据表。 然后我们需要在升级脚本中编写插入查询,如该库的文档中所述。

但如果我们必须添加100个查询,那么它们就不是它的快捷方式。 我们必须在升级脚本中编写100个插入语句。

如果我们接到错误说法 无法将只读数据库从版本x升级到y 这是它的解决方案:

SQLITE cant upgrade read-only database from version 1 to 2