6

我已经在应用商店(1.0 版)上上传了一个应用。我的应用程序使用 sqlite 数据库来存储一些数据。现在,我对数据库进行了一些更改(我在我的数据库中的一个表中添加了 2 或 3 个新列)。我想用新版本 1.1(具有不同的数据库结构)更新我的应用程序的以前版本。现在,当已经使用 1.0 版的用户将应用程序升级到 1.1 版时,数据库已经存在于应用程序沙箱中,因此,应用程序指向 1.1 版,但我的数据库仍然是旧的。如果有的话,我想拥有带有旧数据的新数据库。请帮帮我。谢谢。

4

2 回答 2

13

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 来至少在未来解决你的问题。

于 2012-04-13T10:54:02.010 回答
-1

您可以在启动时检查它是否是旧数据库,如果是,则有一个例程来创建一个具有新结构(具有临时名称)的新数据库,将所有数据从旧数据库复制到新数据库,关闭旧数据库并删除它,关闭新数据库,重命名它,然后最后再次打开它以供您更新的应用程序使用。简单、快速,而且您不需要深入了解 SQLite 即可。

于 2012-04-13T06:47:46.833 回答