如何在 Windows Phone 8 中更新现有的 sqlite 数据库而不丢失数据?

How to update existing sqlite database without losing data in Windows Phone 8?

我目前正在 Windows Phone 8 中使用 SQLite 数据库。我有一个 table 应用程序,其中包含一些列和数据,该应用程序是实时的。现在有了下一次更新,我想在 table 中添加一个新列,而不会丢失之前插入的数据。

有人可以建议我怎样才能达到这个要求吗?

编辑

这是我的class,我想在其中添加一个新列。

public class Info
{
   [PrimaryKey]
   public int id{get;set;}
   public string name{get;set;}
   public string information{get;set;}
   public string nick_name{get;set;}
}

列数据类型为字符串,如下所示

public string disp_id{get;set;}
  • 用一些临时名称重命名旧 table
  • 使用所需名称和新列定义创建新 table
  • 将数据从旧 table 复制到新 table 并添加新列数据
  • 降旧table

添加您的 table 定义和新的列类型也可能有助于我们为工作提供一些 SQL。

无论如何,应用程序将在更新期间停止。

编辑:

由于您没有发布精确回复所需的 SQL,我 "imagined" 它看起来像什么,所以我可以完成这个答案。 假设您的 table 看起来像这样:

CREATE TABLE "info" (
"id"  INTEGER NOT NULL,
"name"  TEXT,
"information"  TEXT,
"nick_name"  TEXT,
PRIMARY KEY ("id" ASC)
);

添加列将恢复为:

PRAGMA foreign_keys = OFF;

alter table "info" rename to "info_temp";

CREATE TABLE "info" (
"id"  INTEGER NOT NULL,
"name"  TEXT,
"information"  TEXT,
"nick_name"  TEXT,
"disp_id"  TEXT,
PRIMARY KEY ("id" ASC)
);

insert into "info" ("id", "name", "information", "nick_name") select "id", "name", "information", "nick_name" from "info_temp";

DROP TABLE "main"."info_temp";

这是做什么的:

  1. 禁用当前交易的外键完整性检查 修改不会因为完整性检查而失败;
  2. 将信息 table 重命名为 info_temp;
  3. 使用更新后的架构创建新信息 table;
  4. 将原始信息table中的数据复制到新信息中;
  5. 删除旧信息table (info_temp);