2012-04-13 40 views
5

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

+0

检查我的答案在这里:http://stackoverflow.com/a/9851554/108574数据库升级战略。 – 2012-04-13 06:34:54

+0

@HeShiming谢谢哥们。但是我已经在应用商店中上传了1.0版本,并且没有元数据表(用于存储数据库版本,如您所建议的那样)。现在,我想上传一个新版本,并且数据库结构发生了变化。那么,我现在怎么实现呢? – anshul 2012-04-13 06:45:16

+0

以及该方法仍然有效。您只需通过检查select语句的返回值来检查元数据表的存在性。如果它不存在,请创建一个。 – 2012-04-13 07:44:28

回答

12

SQLite支持的东西称为user_version属性,您可以执行PRAGMA user_version来查询您的应用程序数据库的当前架构版本。当您的应用程序启动时,此查询可能会在开始时写入。

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

只要你创建的SQLite数据库,它是把这个属性user_version,所以,当你在未来的升级可以查询当前值的最佳实践。检查需要做什么并执行剩余的更改或创建表来升级模式版本。

例如:

在第一个版本我创建COL1表1,COL2

我执行SQL创建表1,一旦成功完成,我执行编译user_version = 1,所以这将表明我的当前架构版本是1

在未来的版本我添加新的COL3,我需要我的架构版本更改为2

我第一次查询user_version,检查它的价值,如果是1,那么你需要运行修改脚本添加新列,并设置用户版本为2

在你的情况,因为你以前没有设置user_version,这将是很难区分新安装VS升级方案。因此,现在可以假定如果数据库存在,它是升级方案并执行alter scripts,如果不存在,假设它是一个新的安装场景并运行创建脚本。但看看你是否可以使用上面的编译指示来解决你的问题。

+0

似乎是更新和维护数据库模式的好方法,我会试着尝试这一点。 – 2013-04-11 06:53:59

-1

你可以在启动检查它是否是旧数据库,如果是有一个程序来创建新的结构(使用临时名称)的新数据库,从旧的复制所有数据到新的,关闭旧分贝&删除它,关闭新的数据库,重命名它,然后最后打开它再次为您的更新的应用程序使用。简单,快速,&你不需要深入的SQLite知识来做到这一点。

+0

但是我想只在用户从1.0升级到1.1时才能做这件事。您所讲的方法将在应用程序委托中的appDidFinishLaunching方法中实现,因此,每次启动我的应用程序时都会执行这些代码行。对???所以,我需要像sqlite数据库的版本号。 – anshul 2012-04-13 07:06:15

+0

并非如此 - 你只需要检查数据库是否是新结构或不是 – SomaMan 2012-04-13 07:55:59

相关问题