我已经在应用商店(1.0 版)上上传了一个应用。我的应用程序使用 sqlite 数据库来存储一些数据。现在,我对数据库进行了一些更改(我在我的数据库中的一个表中添加了 2 或 3 个新列)。我想用新版本 1.1(具有不同的数据库结构)更新我的应用程序的以前版本。现在,当已经使用 1.0 版的用户将应用程序升级到 1.1 版时,数据库已经存在于应用程序沙箱中,因此,应用程序指向 1.1 版,但我的数据库仍然是旧的。如果有的话,我想拥有带有旧数据的新数据库。请帮帮我。谢谢。
2 回答
sqlite 支持称为 user_version 属性的东西,您可以执行PRAGMA user_version
查询应用程序数据库的当前架构版本。当您的应用程序启动时,此查询可能会在开头写入。
要更新此 user_version,请执行以下更新查询PRAGMA user_version = version_num
;
每当您创建 sqlite db 时,最好将此属性设置为 user_version,以便将来升级时可以查询当前值。检查它需要什么并执行剩余的更改或创建表以升级您的架构版本。
例如:
在第一个版本中,我使用 col1、col2 创建 table1
我执行 sql 来创建 table1,一旦成功完成,我执行 pragma user_version = 1。所以这将表明我当前的模式版本是 1
在未来的版本中,我添加了新的 col3,我需要将我的架构版本更改为 2
我首先查询 user_version,检查它的值,如果它是 1,那么你需要运行 alter script 添加新列并将用户版本设置为 2。
在您的情况下,由于您之前没有设置 user_version,因此很难区分新安装和升级方案。所以现在你可能假设如果 db 存在它是升级场景并执行改变脚本,如果不存在则假设它是一个新的安装场景并运行创建脚本。但是看看你是否可以使用上述 pragma 来至少在未来解决你的问题。
您可以在启动时检查它是否是旧数据库,如果是,则有一个例程来创建一个具有新结构(具有临时名称)的新数据库,将所有数据从旧数据库复制到新数据库,关闭旧数据库并删除它,关闭新数据库,重命名它,然后最后再次打开它以供您更新的应用程序使用。简单、快速,而且您不需要深入了解 SQLite 即可。