如何将SQLite文件中的更改迁移到现有应用程序?

时间:2015-09-16 11:35:16

标签: ios objective-c sqlite

我已经提交了一个带有SQLite数据库文件的iOS应用,用于在应用内存储数据。

现在在应用程序的下一个版本中 - 我在数据库文件中进行了一些修改。

像,

  1. 添加了新表(1个空,2个包含固定数据)
  2. 在表格中添加了新列
  3. 从表中删除现有列
  4. 我想什么?

      

    我将在我的应用程序中添加一个新的数据库文件(其中包括所有更改),首次运行应用程序(更新后)我将检查是否存在旧的数据库文件,如果可用,将附加所有内容从旧文件到新文件,最后将删除旧文件。

    这是正确的方式,还是有更重要的方式,如核心数据迁移或其他更合适的方式?

2 个答案:

答案 0 :(得分:2)

核心数据迁移是完全不同的事情。但是如果你想修改SQLite数据库,你可以

  1. 替换旧文件
  2. 按查询更改SQL DB结构。

答案 1 :(得分:2)

我不知道是否存在正确的方法,但我在这种情况下的经验是创建一个sql迁移脚本并使用sqlite的pragma user_version控制数据库版本。

编辑: 我的应用程序有三个数据库更改,然后我有三个sql迁移脚本。当应用程序启动时,存在if以检查数据库user_version,然后我应用所需的脚本进行数据库更新。

在这个脚本中,我创建了新表,我获取了旧表的信息,我在最近创建的表中插入了数据,在脚本的最后我设置了user_version:

//this number is the version of database: 1, 2, 3... PRAGMA user_version = 2;

要知道用户拥有哪个版本,我会执行查询PRAGMA user_version;

我希望这可以帮到你。

EDIT2:在USER表中添加了字段“login”:

//Create the new table
CREATE TABLE user_new (
    id TEXT PRIMARY KEY,
    login TEXT,
    name TEXT
);

//Get data of older table
INSERT INTO user_new
    SELECT
        id,
        null AS login,
        name
    FROM
        user;

//Delete te older table
DROP TABLE user;

//Rename the new table
ALTER TABLE user_new RENAME TO user;

//Set database version
PRAGMA user_version = 2;