如何在iPhone应用程序上更新sqlite

时间:2011-06-17 07:33:55

标签: iphone sqlite

我有一个使用sqlite3数据库保存数据的iPhone应用程序,在我发布应用程序之前,我需要确保必须将某些表数据(用户已保存)复制到新数据库。

我应该如何管理此迁移。我在考虑分离数据库和查询。那不好吗?因此,当应用程序打开时,我检查数据库是否在文档文件夹中,如果没有复制数据库并在单独的文件中运行查询。然后,当它是新版本时,我检查版本号并仅运行文件中的查询(更新数据并更改其中一些),而不是复制数据库?

2 个答案:

答案 0 :(得分:1)

这样做的一种方法是在数据库中创建一个包含数据库模式版本的表。

一旦用户在文档文件夹中有一个数据库(可能是从应用程序包中的预制数据库中复制的),您应该对该数据库进行更改以使其与当前模式保持同步。这包括升级架构和任何更改的数据。

您可以通过在应用程序中捆绑多个sql脚本来实现此目的,这些脚本将使用户数据库架构一次向前推进一步,例如:

  1. 从用户数据库中读取架构版本=> 3(当前为5)
  2. 执行sql脚本“schema_3_to_4.sql”
  3. 执行sql脚本“schema_4_to_5.sql”
  4. 全部完成 - 准备好使用
  5. 如果您当前的数据库中没有架构版本,只需将其视为版本0并在版本1更新中添加该表,例如:

    begin exclusive transaction;
    
    create table schema (version integer);
    insert into schema(version) values (1);
    
    create table temp_update as select * from question;
    drop table question;
    create table question(id INTEGER PRIMARY KEY, new_answer INTEGER);
    insert into question(id, new_answer) select id, 42 from temp_update;
    drop table temp_update;
    
    commit;
    

答案 1 :(得分:0)

我认为最好的方法是从手动处理sqlite3数据库迁移到基于Core-Data的数据库。 Core Data为您提供了许多用于定义和建模数据的工具,包括一个超级简单(如果可用)lightweight migration进程,它将极大地简化各种数据库版本之间的数据迁移过程。

使用lightweight migration(或更复杂的custom manual migration)您的问题将自动解决。