我正在创建一个带有 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?用户建议这可能完全是错误的方法(“做事的“正确”方式与您的出发方式完全不同”),因为我希望升级尽可能高效。由于我还没有真正发布我的第一个版本,我应该改变我的方法吗?
对于这种情况,最有效的方法是什么?
最佳答案
The way I plan on distributing the database is via the following method for adding a pre-populated database to an app Using your own SQLite database in Android applications.
该代码已经过时一段时间了。请考虑使用更现代和受支持的东西,like SQLiteAssetHelper
.
I want to completely replace those existing tables with the tables from the new pre-populated tables, yet leave the user populated tables intact
SQLiteAssetHelper
支持两种开箱即用的模式:
- 用新的打包副本替换整个数据库
- 运行您自己的 SQL 脚本来更新现有安装的数据库,忽略与您的应用程序打包的副本
由于 SQLiteAssetHelper
是开源的,您可以看到 Jeff Gilfelt 是如何编写它的,并尝试利用它以某种方式支持您的混合场景。
就个人而言,除非您需要在“预填充表”和“用户填充表”之间进行连接,否则我鼓励您使用两个单独的数据库。一个是所有预填充的数据,您可以根据应用程序更新根据需要完全替换这些数据。另一个将保存用户表,您将使用更传统的 SQLiteOpenHelper
处理这些表。而且,您甚至可以使用 ATTACH DATABASE
连接两个单独的数据库,尽管我没有亲自尝试过这种情况。
关于android - 在不删除带有用户输入的表的情况下升级预填充的 sqlite 数据库表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17546815/