如何在 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";
这是做什么的:
- 禁用当前交易的外键完整性检查
修改不会因为完整性检查而失败;
- 将信息 table 重命名为 info_temp;
- 使用更新后的架构创建新信息 table;
- 将原始信息table中的数据复制到新信息中;
- 删除旧信息table (info_temp);
我目前正在 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";
这是做什么的:
- 禁用当前交易的外键完整性检查 修改不会因为完整性检查而失败;
- 将信息 table 重命名为 info_temp;
- 使用更新后的架构创建新信息 table;
- 将原始信息table中的数据复制到新信息中;
- 删除旧信息table (info_temp);