在没有数据丢失的情况下更改Live App的数据库

时间:2015-06-17 14:50:36

标签: ios iphone sqlite core-data

我想更新应用商店中现有应用的数据库(适用于新版本)。所以我需要在使用app之前删除现有的数据库,否则我可以更改数据库的名称。之后如果我的旧数据库中存在数据,我必须获取所有数据并将其再次插入到我的新sqlite文件中。

这似乎是一个缓慢的过程。我的用户不想丢失数据。有没有其他方法可以让我轻松更改现有应用程序的数据库,而不会丢失任何数据。

1 个答案:

答案 0 :(得分:1)

首先,您需要检测数据库是否为旧数据库。一种方法是使metadata表具有名称/值文本列(value是保留字,因此使用不同的列名称)并将当前的schemaVersion保留在那里。如果这不存在,那么您知道它是旧版本,但从现在开始,您需要在这些更新期间保持schenaVersion最新。您可以在该表中保留有关数据库本身的其他信息。

如果数据库根本不同,那么您需要使用您建议的第二种方法:

  1. 检测是否有旧版本的数据库,如果没有中止更新。
  2. 使用临时文件名创建新数据库。这包括设置新架构。
  3. 立即打开两个数据库。
  4. 遍历旧数据库中的表并获取任何必要的值,以便在新数据库中填充表。
  5. 关闭两个数据库。
  6. 删除旧数据库文件并将新的临时数据库文件移动到旧的,现有的名称。
  7. 打开数据库并继续。
  8. 或者,如果更改没有明显不同,则可以使用ALTER TABLE语句来修改架构。这是更好的方法,因为如果没有从模式中删除列,它会保留值。