使用不同的sqlite db结构将新版本更新到app store

时间:2012-04-13 06:32:14

标签: ios sqlite app-store

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

2 个答案:

答案 0 :(得分:13)

sqlite支持称为user_version属性的东西,您可以执行PRAGMA user_version来查询应用程序db的当前架构版本。当您的应用程序启动时,可以在开头写入此查询。

更新此user_version执行更新查询PRAGMA user_version = version_num;

每当您创建sqlite db时,最好将此属性设置为user_version,以便将来升级时可以查询当前值。检查它需要什么,并执行剩余的alter或create table来升级模式版本。

例如:

在第一个版本中,我使用col1,col2

创建table1

我执行sql来创建table1,一旦成功完成,我执行pragma user_version = 1.所以这将表明我当前的架构版本是1

在将来的版本中我添加了新的col3,我需要将我的架构版本更改为2

我首先查询user_version,检查它的值,如果是1,则需要运行alter script添加新列并将用户版本设置为2.

在您的情况下,由于您之前未设置user_version,因此很难区分新安装与升级方案。所以现在可能你假设如果db存在则是升级场景并执行alter scripts,如果不存在则假设它是新的 安装方案并运行创建脚本。但是看看你是否可以使用上面的pragma来解决你的问题。

答案 1 :(得分:-1)

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