首页 文章

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

提问于
浏览
2

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

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

2 回答

  • 1

    一种方法是在数据库中包含一个包含数据库模式版本的表 .

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

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

    • 从用户数据库中读取模式版本=> 3(当前为5)

    • 执行sql脚本"schema_3_to_4.sql"

    • 执行sql脚本"schema_4_to_5.sql"

    • 全部完成 - 准备好使用

    如果您当前的数据库中没有模式版本,请将其视为版本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;
    
  • 0

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

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

相关问题