繁体   English   中英

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

[英]how to upgrade database version with new rows with SQLiteAssetHelper

我开发了一个教程应用程序,其中保存了500多个问题和答案。 他们又是一张被称为“最爱”的桌子。 供用户输入。 现在,我想用新的问题和答案更新我的应用程序。 但是我不想删除“收藏夹”表中的数据(以防用户标记了一些收藏夹中的问题,因此不应从收藏夹中删除那些问题)

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


我的旧数据库包含:

  1. 数据表(静态表)
  2. 收藏夹表(本地表)

因此,根据sqliteassethelper文档,我添加了新的db:,其中包含:更新的数据表。 我没有在这里插入收藏夹表,因为它将在脚本文件中创建。 并将该数据库存储在assets >> databases文件夹中。

然后我创建了一个脚本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";

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

文档告诉您

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

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

只有在没有旧数据的情况下(如果是首次安装该应用程序),才会使用资产文件夹中的数据库文件。 如果有旧数据,则SQLiteAssetHelper执行SQL升级脚本。

SQLiteAssetHelper项目包含一个示例该示例显示此类脚本的外观。

要将数据保留在收藏夹表中,您无需执行任何操作。 要添加新的问题,请使用一串INSERT语句。 (有关如何获取这些INSERT语句的信息,请参见如何比较两个SQLite数据库 。)

终于我得到了我的问题的答案。 如我所说,我正在使用SQLiteAssetHelper库。 现在我想添加新记录并想要发布更新版本。 所以我在寻找可以将新的更新数据库存储在Assets文件夹中的功能。 该库将更新用户电话中的旧数据库。 与保留旧数据库中的特定表。

但目前该库不提供此类功能。 升级脚本只能用于更改旧数据库。 我们可以添加新的更新的数据库,并从新数据库复制数据。

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

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

如果我们出现错误消息说无法将只读数据库从版本x升级到y,那么这里是解决方案:

SQLITE无法将只读数据库从版本1升级到版本2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM