我有一个使用sqlite3数据库保存数据的iPhone应用程序,在我发布应用程序之前,我需要确保必须将某些表数据(用户已保存)复制到新数据库。
我应该如何管理此迁移。我在考虑分离数据库和查询。那不好吗?因此,当应用程序打开时,我检查数据库是否在文档文件夹中,如果没有复制数据库并在单独的文件中运行查询。然后,当它是新版本时,我检查版本号并仅运行文件中的查询(更新数据并更改其中一些),而不是复制数据库?
答案 0 :(得分:1)
这样做的一种方法是在数据库中创建一个包含数据库模式版本的表。
一旦用户在文档文件夹中有一个数据库(可能是从应用程序包中的预制数据库中复制的),您应该对该数据库进行更改以使其与当前模式保持同步。这包括升级架构和任何更改的数据。
您可以通过在应用程序中捆绑多个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;
答案 1 :(得分:0)
我认为最好的方法是从手动处理sqlite3数据库迁移到基于Core-Data的数据库。 Core Data为您提供了许多用于定义和建模数据的工具,包括一个超级简单(如果可用)lightweight migration进程,它将极大地简化各种数据库版本之间的数据迁移过程。
使用lightweight migration(或更复杂的custom manual migration)您的问题将自动解决。