#pragma once #include "Defines.h" #include "iDataEngine_global.h" class QSqlDatabase; /// 该类实现基础的数据增删改功能 /// 对于数据链接QSqlDatabase,本类不负责开启 class I_DATAENGINE_EXPORT iSqlEngine { public: /// @brief 构造函数,非静态类 /// @param pSqlDb,数据载体,如果为空,则自动 /// 从ZxDbSimple中获取 /// @note 默认pSqlDb是打开的状态,而且不负责关闭 iSqlEngine(QString sConnStr = "", QSqlDatabase* pSqlDb = NULL); ~iSqlEngine(); /// @brief 执行失败时,返回错误信息 QString getLastError(); public: /// @brief 单纯执行SQL,如删除 bool execSqlOnly(QString sSql); /// @brief 查询数据 /// @param sSql /// @param vvecData,数据载体 /// @param bTopOnly,是否仅仅返回一条记录 /// @param pListFieldNames,Rec.FieldName /// @note 返回true并不代表vvecData一定有数据 bool queryData(QString sSql, VVecVariant& vvecData, \ bool bTopOnly = false, QStringList* pListFieldNames = NULL); /// @brief 批量保存模式,需要统一删除原来的重复数据 /// @param sTable针对表名 /// @param vvecData结果 /// @param mapKeyFields主键字段位置+名称 bool saveData(QString sTable, VVecVariant& vvecData, \ QMap mapKeyFields); // /// @brief 单条记录保存模式 // bool saveDataToDb(QString& sTable, \ // QStringList& listFieldKeys, \ // QMap& mapFieldValues); // /// @brief 插入单条记录 // bool insertSql(QString& sTable, \ // QMap& mapFieldValues); // /// @brief 更新单条记录 // bool updateSql(QString& sTable, \ // QStringList& listFieldKeys, \ // QMap& mapFieldValues); // /// @brief 删除 // bool deleteSql(QString& sTable, QMap& mapFieldValues); // /// @brief 检查关键字段在某个表中是否存在 // bool isRecordExists(QString& sTable, \ // QStringList& listFieldKeys, \ // QMap& mapFieldValues); private: /// @brief 批量删除模式 /// @param sTable针对表名 /// @param vvecData结果 /// @param mapKeyFields主键字段位置+名称 bool deleteIfExists(QString sTable, VVecVariant& vvecData, \ QMap mapKeyFields); // 内部匹配对 QString verifyValue(QString sField, QString sValue); QString makeFieldPair(QString sField, QString sValue); private: QSqlDatabase* m_pSqlDb; QString m_sConnStr; QString m_sError; };