概述
- 本文将介绍前文中类SqliteExt的用法
- SqliteExt类功能就三大类:
- 读取slqite中表格的数据
- 写入用户表格中的数据到文件
- 其他功能: 执行sql语句接口......
- 思路: 获取数据库中表每个字段的类型,根据类型移动指针给结构体赋值
- 存放数据的内存需要按照1字节对齐, 例如,下面的结构体stTableCommonIdStr存放表common中的数据, 需要设置1字节对齐
#pragma pack(1)
struct stTableCommonIdStr
{
int id_;
QString name_;
};
#pragma pack()
而表common的结构为:
表common中的数据为
-
SqliteExt的特点(相对常规数据库读写)
- 读取不用调用方编写sql语句, 模块内部自动完成
- 写入数据不用调用方编写sql语句, 模块内自动完成
-
SqliteExt不足
后期有时间再优化与改进,先把V1.00.000开发出来, 为后面重构铺垫。- 目前支持的数据库字段较少,包括: INTEGER, TEXT , DOUBLE
- 基于Qt实现,不满足通用c++使用场景
设计之初
- sqlite数据库内容,无论是读取还是写入,都需要手动编写sql语句交由特定的函数执行
- 如果新增字段, 就需要编写对应的字段的读写,如果遗漏, 则无法完成对应的功能
- 单个项目的配置项可能很多,编写sql语句较为麻烦
- 多个项目使用, 无法达到复用的目的
- 于是,读写任意sqlite数据库表数据的念头产生了
- 自己用的都是小项目, 使用sqlite作为配置文件,简单方便,由于项目逐渐增多,项目的配置维护成本增加
SqliteExt 使用顺序
按照下面的顺序:
- A. 初始化,传递指定的数据库文件及相关参数
- B. 读写表数据
- C. 师傅资源
SqliteExt 头文件函数介绍
initialized_
功能
- 初始化函数,需要调用该函数完成模块初始化后, 方可读写数据库中的内容
使用范例
/// 0. 读取界面当前选择的是哪种
oct_sqlite::stSQLInit st_init;
{
/// 指定打开的数据库文件
st_init.str_sqlite_file_ = str_file;
/// 指定数据库的编辑策略
st_init.en_es_ = oct_sqlite::ES_MANUAL_SUBMIT;
/// 本次需要读取数据库中的哪种数类型
st_init.en_tt_ = static_cast<oct_sqlite::enTableType>(ui.combo_load_type->itemData(ui.combo_load_type->currentIndex()).toInt());
}
/// 1. 执行初始化
int sql_ext_init_ret = psqlite_ext_->initialized_(st_init);
/// 2. 检查初始化结果
if (0 != sql_ext_init_ret)
{
return;
}
carry_on_sql_
功能
- 执行sql语句
函数原型
/// -------------------------------------------------------------------------------
/// @brief: 执行sqlite语句
/// @param: const QString & str_sql - sql语句
/// @param: const QString & str_table_name - 对数据库的那张表执行
/// @ret: int
/// 0 - 成功
/// 1 - 失败, 数据库没有初始化
/// 2 - 失败, 参数str_sql 为空
/// 3 - 失败, 数据库中没有[str_table_name]这张表
/// 5 - 失败, 对应的数据库model没有得到
/// 6 - 失败, sql语句错误
/// 7 - 失败, sql语句执行失败,请检查sql语句
/// -------------------------------------------------------------------------------
int carry_on_sql_(const QString& str_sql, const QString& str_table_name) noexcept;
sql_record_
功能
- 获取sql语句的执行结果
原型
/// -------------------------------------------------------------------------------
/// @brief: 获取sql语句执行结果
/// @param: const QString & str_sql - 对应的sql语句
/// @param: const QString & str_table_name - 操作哪张表
/// @ret: QT_NAMESPACE::QSqlQuery*
/// nullptr - sql语句或者没有[str_table_name]对应的表格, 或者创建对应的model错误
/// != nullptr - 成功
/// -------------------------------------------------------------------------------
QSqlQuery* sql_record_(const QString& str_sql, const QString& str_table_name) noexcept;
uninitialized_
功能
- 释放模块资源,退出前请显示调用
原型
///-------------------------------------------------------------------------------
/// @brief: 释放
/// @ret: void
///
/// -------------------------------------------------------------------------------
void uninitialized_() noexcept;
mapTable
功能
- 调用**initialized_**函数后, 调用该函数,可获得当前表格中的数据结构
原型
/// -------------------------------------------------------------------------------
/// @br