Android SqliteAssetHelper - 将资产中的数据库表与现有数据库

时间:2016-05-16 20:13:05

标签: android android-sqlite sqliteopenhelper

我正在使用Android SqliteAssetHelper库(https://github.com/jgilfelt/android-sqlite-asset-helper) 我使用这个库发送了我的数据库,数据库包含table1上的一些记录。 现在我想用一个带有附加记录的新数据库更新我的应用程序,这些记录应该插入我已发布的记录中。我不确定如何编写用于升级的SQL脚本,因为两个数据库的模式都相同。有没有人试过这个?

2 个答案:

答案 0 :(得分:0)

在op在其他答案中发表评论之后,有人澄清说有两个数据库要合并在一起。操作系统想知道是否有一种方便的方法将两个数据库与SQLiteAssetHelper库合并。

不幸的是,没有直接方法,因为该库也使用运行脚本的相同Android模式来修改现有数据库。

解决方法是将第二个数据库(50个记录集)转换为50个INSERT语句,这些语句将放在现有的50个旁边。(互联网上有各种工具可以简化该步骤,因此您没有手动完成。)因此,只要业务逻辑可以与它们一起工作,如果模式相同,它们都可以进入原始表。或者如果你需要将它们分开,请仍然使用50个INSERT,但要将它们INSERT到不同的表名。

然后,一旦你有这50个INSERT语句和50个新行的数据,就把这些语句放在升级脚本中,你可以按照标准库documentation来了解如何通过这个来运行该脚本库。

答案 1 :(得分:0)

您可以使用sqldiff查找旧数据库与新数据库之间的差异来实现此目的。

您在两个数据库上调用sqldiff并将输出通过管道传输到符合SQL Asset Helper升级格式(即<database_name>_upgrade_<from_version>-<to_version>.sql)的文件中。

所以,整个事情将是sqldiff database.db database_new.db > database.db_upgrade_1-2.sql

然后只需确保.sql目录位于assets/databases目录中并更改Java代码中的版本号(在示例中,从1更改为2)。