使用不同的sqlite数据库结构更新新版本到应用程序商店

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

sqlite支持所谓的user_version属性,你可以执行PRAGMA user_version来查询你的应用程序数据库的当前模式版本。 当您的应用程序启动时,此查询可能会在开始时写入。

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

每当你创buildsqlite数据库,最好的做法是把这个属性user_version,以便将来升级时,你可以查询当前值。 检查需要做什么并执行剩余的更改或创build表来升级您的模式版本。

例如:

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

我执行sql来创buildtable1,一旦它成功完成,我执行编译user_version = 1,所以这将表明我目前的架构版本是1

在将来的版本中,我添加新的col3,我需要将我的模式版本更改为2

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

在你的情况下,因为你之前没有设置user_version,所以很难区分新安装和升级scheme。 所以现在可能是你假设如果数据库是存在的升级scheme,并执行改变脚本,如果不存在假设这是一个新的安装scheme,并运行创build脚本。 但是,看看你是否可以使用以上编译来解决你的问题,至less在未来。

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