如何管理桌面文件数据库版本



如何在升级桌面应用程序时管理数据库更改?

我们有一个桌面应用程序的SQLite数据库。卸载程序保留下次安装使用的数据库。但是,如果下一次安装有更新版本怎么办?如何在保留数据的同时升级表?

我们使用。net和Linq2sql

我是这样做的:

在我的代码中我定义了数据库的版本

#define DB_VERSION 2

这个版本号是递增的,每次我做一个改变代码"破坏"数据库(对模式或数据库内容的语义不兼容的改变)

当代码创建一个新数据库时,它执行以下SQL命令

QueryFormat(L"PRAGMA SCHEMA_VERSION = %d;",DB_VERSION);

注意,这必须是在所有CREATE TABLE命令都执行完之后,否则sqlite会增加SCHEMA_VERSION。

当代码打开一个现有的数据库时,它做的第一件事是

Query(L"PRAGMA schema_version;")

将查询返回的SCHEMA_VERSION与DB_VERSION进行比较。如果它们不匹配,则数据库是由不同的软件版本创建的。接下来会发生什么取决于你需要的细节。通常:

  • 数据库是由最新的软件创建的:inform user and exit

  • 数据库是由有升级的旧软件创建的:为用户提供运行升级代码或重新初始化数据库的选项

  • 数据库是由未升级的旧软件创建的:为用户提供重新初始化数据库或退出的选项

升级代码如何工作的细节在很大程度上取决于你需要什么。通常打开旧数据库并打开一个新的空数据库。读取旧表,根据需要转换数据,然后写入新数据库。关闭dbs。删除旧数据库。将新数据库重命名为标准数据库名称。打开新的数据库

如果没有别的,echo .dump | sqlite my_database.sqlite的输出被设计为非常可移植,甚至到非sqlite数据库。

或者,如果我误解了你的问题,你可能需要alter table

最新更新