升级预先填充的sqlite数据库表而不删除带有用户输入的表?

时间:2013-07-09 11:15:16

标签: android sqlite

我正在创建一个带有Sqlite数据库的Android应用程序,该数据库包含几个带有预先填充数据(500多行)的表格,并且还有用户填充的表格。

我计划分发数据库的方法是通过以下方法将预先填充的数据库添加到应用Using your own SQLite database in Android applications

我遇到了这个问题,但是当谈到升级时,我可能会在预先填充的表中添加一些行,甚至可能修改现有行中的大量数据,我想完全用新预先填充的表中的表替换那些现有表,但保留用户填充的表。

我发现了另一篇帖子How do i upgrade my pre-populated sqlite database on my device without re-creating tables?,用户认为这可能是完全错误的做法(“正确的”做事方式与你的设定方式完全不同“)因为我希望升级到尽可能高效。由于我还没有真正发布我的第一个版本,但我应该改变我的方法吗?

这种情况最有效的方法是什么?

1 个答案:

答案 0 :(得分:3)

  

我计划分发数据库的方式是通过以下方法将预先填充的数据库添加到应用程序在Android应用程序中使用您自己的SQLite数据库。

该代码已经过时了一段时间。请考虑使用更现代和支持的内容like SQLiteAssetHelper

  

我想用新预先填充的表中的表替换那些现有表,但保留用户填充的表

SQLiteAssetHelper支持开箱即用的两种模式:

  • 使用新的打包副本替换整个数据库
  • 运行您自己的SQL脚本以更新现有已安装的数据库,忽略随应用程序打包的副本

由于SQLiteAssetHelper是开源的,您可以看到Jeff Gilfelt如何编写它并尝试利用它来某种方式支持您的混合场景。

就个人而言,除非您需要在“预先填充的表”和“用户填充的表”之间进行连接,否则我建议您使用两个单独的数据库。其中一个是预先填充的数据,您可以根据应用更新完全替换。另一个会保存用户表,您可以使用更常规的SQLiteOpenHelper来处理。并且,即使我使用ATTACH DATABASE,您也可以使用两个单独的数据库进行连接,但我没有亲自尝试过这种情况。