0

我有一个 C++ 应用程序,它通过 QxOrm 将数据存储在数据库 (SQLite) 中。

很明显,在下一个版本中,列将被添加/删除/重命名,所以我想为每个创建的数据库设置一个版本号,这样当有人尝试加载数据库时,它会将其版本与当前版本进行比较应用程序并自动添加/删除/重命名列以匹配当前架构。

我在 QxOrm 文档中找不到类似的内容:

qx::QxSqlDatabase::getSingleton()->setVersion(2);

那么首先可以用 SQLite 做那种事情吗?如果不是,我应该只创建一个保存数据库版本的表吗?

4

2 回答 2

2

数据库版本可能还不够:您应该为每个持久类存储一个版本(可能还有每个持久类的其他信息,例如列列表)。当您在 QxOrm 上下文中注册一个持久类时,您必须输入一个版本号:

QX_REGISTER_HPP_XXX(myClass, myBaseClass, myClassVersion)

您可以在 QxOrm 库的常见问题解答中找到有关创建 SQL 模式的一些信息: http ://www.qxorm.com/qxorm_en/faq.html#faq_230

使用 QxOrm 库的自省引擎,这很容易做到,更多关于自省引擎的细节在这里: http ://www.qxorm.com/qxorm_en/faq.html#faq_190

您应该在数据库中创建一个表来存储每个持久类的状态:您可以存储每个类的版本号、列列表等......然后比较两个版本的持久类以进行修改将非常容易您的 SQL 架构。

于 2012-04-06T07:49:33.590 回答
0

现在,您有 QxEntityEditor 应用程序来管理您的数据库模式演变。QxEntityEditor 是 QxOrm 库的多平台和跨数据库图形编辑器。此处提供了 QxEntityEditor 功能的视频演示:http ://www.qxorm.com/qxorm_en/tutorial_4.html

于 2014-03-02T18:41:59.170 回答