10 KiB
版本与数据库配置
**本文档中引用的文件** - [version_info.txt](file://version_info.txt) - [database_modify.xml](file://database_modify.xml) - [DB\数据库字段修改记录.txt](file://DB/数据库字段修改记录.txt) - [cpp\Operator\UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp) - [h\UpdateDataBase.h](file://h/UpdateDataBase.h) - [cpp\Tools\checkupdate.cpp](file://cpp/Tools/checkupdate.cpp) - [h\checkupdate.h](file://h/checkupdate.h)目录
版本控制机制
version_info.txt 文件是系统版本控制的核心元数据文件,其主要作用是存储当前软件的版本信息,支持自动更新功能。该文件位于安装目录中,其内容结构简单,仅包含一个版本号字段。
根据文件内容分析,当前版本号为 2.4.1。该版本号在系统启动时被读取,并与服务器端的最新版本进行比对,以判断是否需要执行更新操作。
版本比对逻辑主要在 checkupdate.cpp 文件中实现。系统通过 GetGeoMativeVersion() 函数从可执行文件的资源中提取版本信息,并通过 HTTP 请求从服务器获取最新的版本号(GeomativeVersion.txt)。如果本地版本低于服务器版本,则触发更新流程。
版本控制流程如下:
- 系统启动时读取
version_info.txt中的版本号 - 通过 HTTP 请求获取服务器端最新版本号
- 比较本地与远程版本号
- 若本地版本较旧,则提示用户更新或自动下载更新包
- 更新完成后,更新本地版本信息
该机制确保了软件能够及时获取最新功能和安全补丁,同时避免了不必要的更新操作。
本节来源
数据库变更管理
database_modify.xml 文件是数据库结构变更管理的核心配置文件,采用 XML 格式存储数据库的变更历史。该文件详细记录了数据库表结构的增删改操作,包括字段属性、主键、索引、外键等元数据信息。
XML结构分析
该文件采用分层结构,根节点为 current_version,包含当前版本号。其子节点 pre_version 记录了历史版本的变更信息。每个 pre_version 节点包含一个 value 属性,表示该版本号。
在 pre_version 节点下,table 元素表示对数据库表的操作,其 modify_type 属性定义了操作类型:
1: 增加表2: 删除表3: 修改表
column 元素描述了字段的详细属性:
name: 字段名称is_primary_key: 是否为主键value_type: 字段类型(1:text, 2:Memo, 3:Byte, 4:Integer, 5:Long, 6:Single, 7:Double, 8:Currency, 9:AutoNumber, 10:Date/Time, 11:Yes/No)attribute_value: 字段长度(仅对文本类型有效)index: 索引类型(0:无索引, 1:允许重复, 2:不允许重复)is_foreign_key: 是否为外键is_empty: 是否允许为空is_compress: 是否压缩
变更执行流程
数据库变更的执行由 UpdateDataBase.cpp 中的 CUpdateDataBase 类负责。其工作流程如下:
flowchart TD
A[启动系统] --> B{是否存在database_modify.xml?}
B --> |否| C[无需更新数据库]
B --> |是| D[解析XML文件]
D --> E[获取当前数据库版本]
E --> F[查找匹配的pre_version]
F --> G[提取变更指令]
G --> H{遍历变更指令}
H --> I[增加表]
H --> J[删除表]
H --> K[修改表]
I --> L[生成CREATE TABLE语句]
J --> M[生成DROP TABLE语句]
K --> N[生成ALTER TABLE语句]
L --> O[执行SQL]
M --> O
N --> O
O --> P[更新versioninfo表]
P --> Q[完成数据库更新]
图示来源
当系统检测到数据库需要更新时,会按照以下步骤执行:
- 读取
database_modify.xml文件 - 解析当前版本号,查找对应的变更记录
- 根据
modify_type执行相应的数据库操作 - 更新数据库中的
versioninfo表,记录新的版本号 - 记录更新日志到
LOG\update_db.log
本节来源
XML与文本格式对比
系统中存在两种数据库变更记录格式:结构化的 XML 格式和纯文本格式。database_modify.xml 采用 XML 格式,而 DB\数据库字段修改记录.txt 则采用纯文本格式。
文本格式分析
纯文本格式的变更记录位于 DB\数据库字段修改记录.txt 文件中,其内容为人工编写的变更日志,按时间顺序记录了数据库的变更历史。例如:
2015年6月2日---
1:td2dcon增加字段bUse,用于标记该条记录是否有效
2:td3dcon增加字段bUse,用于标记该条记录是否有效
3: td1dcon增加字段bUse,用于标记该条记录是否有效
这种格式的优点是易于人类阅读和编写,但存在以下局限性:
- 缺乏结构化,难以自动化解析
- 没有标准化的字段类型定义
- 无法精确描述索引、外键等复杂约束
- 容易出现格式不一致的问题
XML格式优势
相比之下,database_modify.xml 的 XML 格式具有显著优势:
- 结构化存储:采用标准化的标签和属性,便于程序解析和处理
- 自动化处理:可以直接映射到数据库操作指令,实现自动化迁移
- 完整性:包含完整的字段属性定义,包括数据类型、长度、约束等
- 可验证性:可以通过 XML Schema 进行格式验证
- 版本控制:支持多版本变更记录的嵌套管理
XML 格式特别适合在自动化部署和持续集成环境中使用,能够确保数据库结构变更的准确性和一致性。
本节来源
系统升级流程
当系统需要进行数据库结构升级时,会依据 version_info.txt 和 database_modify.xml 两个文件执行完整的迁移流程。
升级触发条件
系统在启动时会检查以下条件来决定是否需要升级:
- 本地版本号与服务器版本号不一致
- 数据库版本号与
database_modify.xml中的版本号不一致 - 存在未应用的
pre_version变更记录
升级执行过程
升级过程由 CUpdateDataBase 类的 ParserUpdateDBXml() 方法驱动,其核心逻辑如下:
- 版本比对:比较
m_strCurVer(当前版本)与 XML 中的current_version值 - 变更查找:遍历
pre_version节点,找到与当前数据库版本匹配的变更记录 - 指令解析:根据
modify_type解析表结构变更指令 - SQL生成:将 XML 指令转换为具体的 SQL 语句
- 事务执行:在数据库事务中执行所有变更操作
- 版本更新:更新
versioninfo表中的版本号
实际案例
假设系统从版本 1.1.1 升级到 1.1.2,需要在 test 表中添加新字段。database_modify.xml 中的配置如下:
<table name="test" modify_type="1">
<column name="id" is_primary_key="1" value_type="9" attribute_value="1"/>
<column name="col1" value_type="2" attribute_value="20" is_empty="1" is_compress="1"/>
<column name="col2" value_type="5" is_foreign_key="0" refer_table_name="FK_test" refer_table_col="fk1"/>
<column name="col3" value_type="5" index="2"/>
</table>
系统将生成以下 SQL 语句并执行:
CREATE TABLE test (
id counter primary key,
col1 text(20) with compression null,
col2 integer,
col3 integer
);
CREATE UNIQUE INDEX iCol3 ON test (col3);
ALTER TABLE test ADD CONSTRAINT FK_col2 FOREIGN KEY (col2) REFERENCES FK_test(fk1) ON UPDATE CASCADE ON DELETE CASCADE;
此过程确保了数据库结构变更的原子性和一致性。
本节来源
部署与维护建议
version_info.txt 和 database_modify.xml 作为关键的元数据文件,在部署、备份和故障恢复中扮演着重要角色。
部署注意事项
- 文件完整性:确保两个文件在部署包中完整存在
- 版本同步:确保
version_info.txt中的版本号与实际软件版本一致 - 权限设置:确保应用程序有读写这两个文件的权限
- 路径正确:确认文件位于正确的安装目录中
备份策略
建议将这两个文件纳入常规备份范围:
version_info.txt:记录当前系统状态,便于版本追溯database_modify.xml:包含数据库变更历史,是数据恢复的关键
故障恢复
当系统出现故障时,这两个文件可帮助快速恢复:
- 通过
version_info.txt确定系统版本 - 通过
database_modify.xml重建数据库结构 - 按照变更历史逐步恢复数据
维护建议
为确保文件的准确性和完整性,建议:
- 变更审计:每次数据库结构变更都必须更新
database_modify.xml - 版本递增:每次发布新版本都必须更新
version_info.txt - 格式验证:使用 XML 验证工具确保
database_modify.xml的格式正确 - 文档同步:保持 XML 文件与数据库实际结构的一致性
- 测试验证:在测试环境中验证变更脚本的正确性
通过严格维护这两个元数据文件,可以确保系统的稳定运行和可维护性。
本节来源