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

时间:2011-04-14 12:40:57

标签: sqlite desktop-application database-update

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

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

我们使用.NET和Linq2sql

2 个答案:

答案 0 :(得分:1)

如果不出意外,echo .dump | sqlite my_database.sqlite的输出设计为非常便携,即使是non-SQLite databases

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

答案 1 :(得分:1)

我是这样做的:

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

#define DB_VERSION 2

每次我更改“中断”数据库的代码(对模式或db内容的语义进行不兼容的更改)时,此版本号都会递增

当代码创建新数据库时,它会执行此SQL命令

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

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

当代码打开现有数据库时,它首先做的是

Query(L"PRAGMA schema_version;")

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

  • 数据库是由更新的软件创建的:通知用户并退出

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

  • 数据库是由较旧的软件创建的,没有升级:提供用户选项以重新初始化数据库或退出。

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