【问题标题】:Change database of Live App without Data Lose更改 Live App 的数据库而不丢失数据
【发布时间】:2015-06-17 14:50:36
【问题描述】:
我想更新现有应用程序的数据库(适用于新版本),该应用程序已在应用商店上线。所以我需要在使用应用程序之前删除我现有的数据库,或者我可以更改数据库的名称。之后如果数据存在于我的旧数据库中,我必须获取所有数据并将其再次插入到我的新 sqlite 文件中。
这看起来是一个缓慢的过程。我的用户不想丢失数据。有没有其他方法可以让我轻松更改现有应用程序的数据库而不会丢失任何数据。
【问题讨论】:
标签:
ios
iphone
sqlite
core-data
【解决方案1】:
首先你需要检测数据库是旧的。一种方法是创建一个带有名称/值文本列的metadata 表(value 是保留字,因此请使用不同的列名)并将当前的 schemaVersion 保留在其中。如果这不存在,那么您知道它是旧版本,但从现在开始,您需要在这些更新期间保持该 schenaVersion 是最新的。您可以在该表中保留有关数据库本身的其他信息。
如果数据库根本不同,那么您需要使用您建议的第二种方法:
- 检测是否是旧版本的数据库,如果不是则中止更新。
- 使用临时文件名创建新数据库。这包括设置新架构。
- 同时打开两个数据库。
- 遍历旧数据库中的表并获取任何必要的值以填充新数据库中的表。
- 关闭两个数据库。
- 删除旧数据库文件并将新的临时数据库文件移动到旧的现有名称。
- 打开数据库并继续。
或者,如果更改没有显着不同,那么您可以使用 ALTER TABLE 语句来修改架构。这是更好的方法,因为如果未从架构中删除列,它会保留值。