当前位置: 首页 > wzjs >正文

东莞营销推广公司江门关键词优化广告

东莞营销推广公司,江门关键词优化广告,阿里巴巴做外贸的网站,漯河logo设计公司抽出来的,直接用就行 头文件CPP文件使用示例 头文件 #ifndef DATABASECOMMON_H #define DATABASECOMMON_H/** 单例封装SQLite通用操作,支持多线程调用;可扩展兼容其他数据库,照着SysRunDatabase写,并且重载openDataba…

抽出来的,直接用就行

  • 头文件
  • CPP文件
  • 使用示例

头文件

#ifndef DATABASECOMMON_H
#define DATABASECOMMON_H/** 单例封装SQLite通用操作,支持多线程调用;可扩展兼容其他数据库,照着SysRunDatabase写,并且重载openDatabase即可* 使用步骤:1、主线程addDatabase,调用setDatabase*         2、setDatabaseName*         3、按需setUserName、setPassword*         4、openDatabase*         5、查询使用execSelect,建表使用execNormalSQL,插入、修改、删除等操作使用execTransaction*         6、closeDatabase(程序生命周期内不需要显式调用,这里仅预留)
*/#include <QObject>
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QMutex>
/** 类名:DatabaseCommon* 功能:数据库基础操作抽象类,由子类实现openDatabase操作* 使用方法:子类化DatabaseCommon,并实现openDatabase函数
*/
class DatabaseCommon: public QObject
{Q_OBJECT
public:void setDatabase(QSqlDatabase db);void setDatabaseName(QString dbName);void setUserName(QString userName);void setPassword(QString password);virtual bool openDatabase() = 0;//不同数据库的打开方式不同void closeDatabase();bool execNormalSQL(const QString &sqlString);bool execSelect(const QString &sqlString, QSqlQueryModel &model);bool execTransaction(const QString &sqlString);bool execTransaction(const QStringList &sqlStrings);
private:DatabaseCommon(const DatabaseCommon&) = delete;DatabaseCommon& operator=(const DatabaseCommon&) = delete;
protected:explicit DatabaseCommon(QObject *parent = nullptr){}virtual ~DatabaseCommon();QSqlDatabase mDatabase;QString mDatabaseName = "";QString mUserName = "";QString mPassword = "";QMutex mMutex;//保证多线程访问安全
};
/** 类名:SysRunDatabase* 功能:应用于SysRun.db数据库,使用全局单例进行访问
*/
class SysRunDatabase : public DatabaseCommon
{Q_OBJECT
public:static SysRunDatabase& Instance(){static SysRunDatabase mInstance;return mInstance;}bool openDatabase() override;
protected:explicit SysRunDatabase(QObject *parent = nullptr){}~SysRunDatabase() override {}
private:SysRunDatabase(const SysRunDatabase&) = delete;SysRunDatabase& operator=(const SysRunDatabase&) = delete;
};#endif // DATABASECOMMON_H

CPP文件

#include "databasecommon.h"
#include <QDebug>
#include <QSqlQuery>
#include <QFile>
#include <QException>
#include <QSqlError>
#include <QMutexLocker>DatabaseCommon::~DatabaseCommon()
{closeDatabase();
}
/** 函数名称:setDatabase* 功能说明:设置数据库对象* 输入参数:数据库对象* 输出参数:无* 其他说明:无*/
void DatabaseCommon::setDatabase(QSqlDatabase db)
{QMutexLocker locker(&mMutex);this->mDatabase = db;
}
/** 函数名称:setDatabaseName* 功能说明:设置数据库名称(对于SQLite,就是db文件路径)* 输入参数:数据库名称* 输出参数:无* 其他说明:无*/
void DatabaseCommon::setDatabaseName(QString dbName)
{QMutexLocker locker(&mMutex);this->mDatabaseName = dbName;
}
/** 函数名称:setUserName* 功能说明:设置数据库用户名* 输入参数:用户名* 输出参数:无* 其他说明:无*/
void DatabaseCommon::setUserName(QString userName)
{QMutexLocker locker(&mMutex);this->mUserName = userName;
}
/** 函数名称:setPassword* 功能说明:设置数据库用户密码* 输入参数:用户密码* 输出参数:无* 其他说明:无*/
void DatabaseCommon::setPassword(QString password)
{QMutexLocker locker(&mMutex);this->mPassword = password;
}
/** 函数名称:openDatabase* 功能说明:打开数据库连接* 输入参数:无* 输出参数:无* 其他说明:无*/
bool SysRunDatabase::openDatabase()
{QMutexLocker locker(&mMutex);if(!QFile::exists(mDatabaseName)){qCritical() << "not exist " << mDatabaseName;return false;}mDatabase.setDatabaseName(mDatabaseName);mDatabase.setUserName(mUserName);mDatabase.setPassword(mPassword);if(!mDatabase.open()){qCritical() << "open failed."<< mDatabase.lastError().text();return false;}return true;
}
/** 函数名称:closeDatabase* 功能说明:关闭数据库连接* 输入参数:无* 输出参数:无* 其他说明:无*/
void DatabaseCommon::closeDatabase()
{mDatabase.close();
}
/** 函数名称:execNormalSQL* 功能说明:执行通用SQL语句(SELECT除外)* 输入参数:SQL语句* 输出参数:无* 其他说明:无*/
bool DatabaseCommon::execNormalSQL(const QString &sqlString)
{QMutexLocker locker(&mMutex);if(!mDatabase.isOpen()){qCritical() << "Database is closed.";return false;}try{QSqlQuery query(mDatabase);if (!query.exec(sqlString)){throw query.lastError();}return true;}catch (const QSqlError &error){qCritical() << "Error:" << error.text();return false;}
}
/** 函数名称:execSelect* 功能说明:执行DQL语句(即SELECT)* 输入参数:SELECE语句* 输出参数:查询模型,获取结果* 其他说明:无*/
bool DatabaseCommon::execSelect(const QString &sqlString, QSqlQueryModel &model)
{QMutexLocker locker(&mMutex);if(!mDatabase.isOpen()){qCritical() << "Database is closed.";return false;}if(!sqlString.startsWith("SELECT", Qt::CaseInsensitive)){qCritical() << "Unsupported operation: " << sqlString;return false;}try{model.setQuery(sqlString, mDatabase);return true;}catch (const QException &ex){qCritical() << "Exception on model.setQuery: " << ex.what();qCritical() << model.lastError().text();return false;}
}
/** 函数名称:execTransaction* 功能说明:基于事务执行SQL语句(SELETE除外)* 输入参数:单个SQL语句* 输出参数:无* 其他说明:无*/
bool DatabaseCommon::execTransaction(const QString &sqlString)
{QMutexLocker locker(&mMutex);if(!mDatabase.isOpen()){qCritical() << "Database is closed.";return false;}if(sqlString.startsWith("SELECT", Qt::CaseInsensitive)){qCritical() << "Unsupported operation: " << sqlString;return false;}if (!mDatabase.transaction()){qCritical() << "Failed to begin transaction:" << mDatabase.lastError().text();return false;}QSqlQuery query(mDatabase);try{if (!query.exec(sqlString)){throw query.lastError();}// 可选:检查受影响行数if (sqlString.trimmed().startsWith("UPDATE", Qt::CaseInsensitive) && query.numRowsAffected() == 0){qWarning() << "Warning: No rows affected by:" << sqlString;}if (!mDatabase.commit()){throw mDatabase.lastError();}return true;}catch (const QSqlError &error){if (!mDatabase.rollback()){qCritical() << "Failed to rollback transaction:" << mDatabase.lastError().text();}qCritical() << "Transaction failed at command:" << query.lastQuery();qCritical() << "Error:" << error.text();return false;}
}
/** 函数名称:execTransaction* 功能说明:基于事务执行SQL语句(SELETE除外)* 输入参数:多个SQL语句* 输出参数:无* 其他说明:无*/
bool DatabaseCommon::execTransaction(const QStringList &sqlStrings)
{QMutexLocker locker(&mMutex);if(!mDatabase.isOpen()){qCritical() << "Database is closed.";return false;}if (!mDatabase.transaction()){qCritical() << "Failed to begin transaction:" << mDatabase.lastError().text();return false;}QSqlQuery query(mDatabase);try{foreach (const QString &sql, sqlStrings){if (!query.exec(sql)){throw query.lastError();}// 可选:检查受影响行数if (sql.trimmed().startsWith("UPDATE", Qt::CaseInsensitive) && query.numRowsAffected() == 0){qWarning() << "Warning: No rows affected by:" << sql;}}if (!mDatabase.commit()){throw mDatabase.lastError();}return true;}catch (const QSqlError &error){if (!mDatabase.rollback()){qCritical() << "Failed to rollback transaction:" << mDatabase.lastError().text();}qCritical() << "Transaction failed at command:" << query.lastQuery();qCritical() << "Error:" << error.text();return false;}
}

使用示例

QSqlDatabase::addDatabase("QSQLITE", "SysRun");//SysRun是数据库连接名
SysRunDatabase::Instance().setDatabase(QSqlDatabase::database("SysRun", false));
SysRunDatabase::Instance().setDatabaseName("123.db");//123.db是数据库文件名
/*打开数据库连接*/
if(!SysRunDatabase::Instance().openDatabase())
{return false;
}
//在此之后就可以增删改查

文章转载自:

http://KHp9bQme.wpydf.cn
http://WQaH4esg.wpydf.cn
http://q6pzsAnu.wpydf.cn
http://qIOwbFxp.wpydf.cn
http://sKNHWLAV.wpydf.cn
http://eQHmnrrk.wpydf.cn
http://rJl8JlWe.wpydf.cn
http://v0sBrGEA.wpydf.cn
http://MDwdwYt3.wpydf.cn
http://7Yyarb5k.wpydf.cn
http://y7jWgiOW.wpydf.cn
http://cJZXmnfu.wpydf.cn
http://5y7jXySZ.wpydf.cn
http://HAEckUEK.wpydf.cn
http://hNIxW3Jn.wpydf.cn
http://NoE2HyUl.wpydf.cn
http://7ZUGsLZN.wpydf.cn
http://X6He8lws.wpydf.cn
http://tGM4STjB.wpydf.cn
http://6QLn0vIV.wpydf.cn
http://Xr1Bq5hE.wpydf.cn
http://DNmgZaC7.wpydf.cn
http://avSf2dJA.wpydf.cn
http://GEG4N307.wpydf.cn
http://K0syx9Rk.wpydf.cn
http://FvjBS9Lg.wpydf.cn
http://IRkpR6tH.wpydf.cn
http://cFu2R6pL.wpydf.cn
http://O5J2pvpJ.wpydf.cn
http://ibfTjejL.wpydf.cn
http://www.dtcms.com/wzjs/753515.html

相关文章:

  • 南郊做网站软件制作app
  • django 网站开发教程医院网站建设需要注意什么
  • 韩国优秀网站欣赏如何把静态图片做成动态视频
  • 为网站开发uwp应用网站建设管理系统免费网站
  • 正能量不良网站免费软件下载seo推广公司哪家好
  • 电商网站成功的营销策略网站建设 自动生成
  • 建站推广公司无锡定制化网站建设
  • 个人网站开发实例有没有设计房子的软件
  • 泰州制作公司网站商贸有限公司怎么注销
  • 怎么做中英文网站河北爱站网络科技有限公司
  • 非法网站怎么推广搭建平台的重要性
  • 小企业网站建设收费做网站的目的和意义
  • 如何做网站效果图宠物店网站开发文档撰写
  • 易班网站的建设内容简单的个人网页模板
  • 怎样创建网站快捷方式玉树州网站建设公司
  • 网站推广的途径和方法国外优秀网站设计欣赏
  • 网站建设及网站推广辽宁省住房和城乡建设厅网站换了
  • 企业网站php广州网站建设 易点
  • 设计师 推荐 网站新乡做网站公司电话
  • 乐清市网站建设哪家性价比高淄博品牌策划公司
  • 门户网站建设信息化项目背景做蛋糕视频的网站
  • 做网站建设的公司行业门户型网站
  • 做渐变色的网站广州做模板网站的公司
  • 全国p2p网站建设企业网站设计一般多少钱
  • 桂林网站排名常州网站建设教程
  • 利用excel做填报网站顺的网站建设信息
  • 网站制作先做数据库还是前台苏州网站 制作 公司
  • 网站建设比较好的公司都有哪些眉山 网站开发
  • 怎么样做好网站运营中国建设银行网站的社保板块在哪
  • wordpress为什么是英文版快速整站排名seo教程