Qt数据库应用11-通用数据生成器

2022-05-07科技197

## 一、前言有两种应用场景需要用到数据生成器,一种是需要测试数据库性能,比如在100万条和1000万条记录的时候对比查询或更新语句执行耗时,一种是随机模拟生成一堆数据,用来测试程序的性能,看下程序中到了百万千万级别的数据量的时候,程序的代码执行是否受影响,影响有大等。很多人觉得sqlite数据库性能超过几十万就不行,于是亲自用这个数据发生器随机模拟生成了一亿条记录,测试下来发现性能有损失,但是不像传说中的垃圾,起码还是完全可用的,只要注意索引要建好,文件体积比较大就是,文件体积膨胀到了1.2GB,估计性能损耗很大程度上在磁盘读写。

通过对各种数据库(sqlite、postgres、mysql、sqlserver等)不同数据量阶段(1万条、100万条、1000万条等)做不同的sql语句处理(查询、插入、删除、更新),Qt内置了sqlite数据库,所以对sqlite的支持是最快最友好的,其次是postgresql数据库、然后是mysql,支持最差的性能最低的是ODBC模式连接的数据库,比如sqlserver数据库必须用odbc的形式连接,由于odbc是一个中间层,理论上性能也是肯定没有直接连接处理快,不过纵观各种用Qt写的项目的场景,很少是需要千万级别亿级别的数据量的,真的到了这个程度可以考虑分库分表来解决。

## 二、功能特点1. 同时支持多种数据库比如odbc、sqlite、mysql、postgresql、sqlserver、oracle、人大金仓等。

2. 一个数据库类即可管理本地数据库通信,也支持远程数据库通信等。

3. 数据库线程支持执行各种sql语句,包括单条和批量。

4. 组件中的所有类打印信息、错误信息、执行结果都信号发出去。

5. 集成数据库通用翻页类(负责具体处理逻辑),搭配分页导航控件(负责外观),形成超级牛逼的翻页控件。

6. 集成数据库自动清理类,设定最大记录数后台自动清理早期数据。

7. 集成自定义委托类,支持复选框、文本框、下拉框、日期框、微调框、进度条等。

8. 同时支持Qt4-Qt6,亲测Qt4.6到Qt6.3任意版本,任意系统和编译器。

9. 本组件无故障 360天7乘24小时 运行在至少上万个现场,商业级别品质保证。

10. 每个类都对应完整详细的使用示例,注释详细,非常适合阅读学习。

11. 可以作为独立的程序运行,比如自动清理早期数据,同步数据到云端。

12. 全部线程处理,不卡界面,自动重连数据库。

13. 普通测试情况,sqlite数据库,数据库发生器每秒钟插入1000条记录约0.003秒钟,同时自动清理数据类每秒钟删除1000条记录约0.13秒,不同线程互不干扰。

## 三、体验地址1. 体验地址:[

2. 国内站点:[)

3. 国际站点:[)

4. 个人主页:[)

5. 知乎主页:[/)

## 四、效果图

## 五、相关代码void frmDbCreat::on_btnOpen_clicked{ if (ui-btnOpen-text == "打开数据库") { DbInfo dbInfo; dbInfo.connName = this-objectName; dbInfo.dbName = AppConfig::DbName2; dbInfo.hostName = AppConfig::HostName2; dbInfo.hostPort = AppConfig::HostPort2; dbInfo.userName = AppConfig::UserName2; dbInfo.userPwd = AppConfig::UserPwd2; QString dbType = AppConfig::DbType2.toUpper; if (dbType == "SQLITE") { dbInfo.dbName = DbHelper::getDbDefaultFile; } dbConn-setConnInfo(DbHelper::getDbType(dbType), dbInfo); if (dbConn-openDb) { dbConn-start; ui-btnOpen-setText("关闭数据库"); } else { QString error = dbConn-getDatabase.lastError.text; QUIHelper::showMessageBoxError("打开数据库失败!\n" + error, 3); } } else { dbConn-stop; dbConn-closeDb; ui-btnOpen-setText("打开数据库"); on_btnClear_clicked; } QTimer::singleShot(100, this, SLOT(getMaxID)); QTimer::singleShot(1000, this, SLOT(on_btnStart_clicked));}void frmDbCreat::on_btnCopy_clicked{ //将数据库设置参数一键粘贴过来 ui-cboxDbType-setCurrentIndex(ui-cboxDbType-findText(AppConfig::LocalDbType)); ui-txtDbName-setText(AppConfig::LocalDbName); ui-txtHostName-setText(AppConfig::LocalHostName); ui-txtHostPort-setText(QString::number(AppConfig::LocalHostPort)); ui-txtUserName-setText(AppConfig::LocalUserName); ui-txtUserPwd-setText(AppConfig::LocalUserPwd);}void frmDbCreat::getMaxID{ if (!dbConn-getOk) { return; } //根据插入sql语句取出对应的表名和自增字段 QString sqlColumn = AppConfig::SqlColumn2; QString sqlValue = AppConfig::SqlValue2; if (sqlValue.contains("AUTO_INCREMENT")) { sqlColumn.replace("insert into ", ""); sqlValue.replace("values", ""); QString tableName = sqlColumn.split("(").first; sqlColumn.replace(tableName, ""); sqlColumn.replace("(", ""); sqlColumn.replace(")", ""); sqlValue.replace("(", ""); sqlValue.replace(")", ""); QStringList listColumn = sqlColumn.split(","); QStringList listValue = sqlValue.split(","); int index = listValue.indexOf("'AUTO_INCREMENT'"); QString columnName = listColumn.at(index); //取出最大记录数 maxID = DbHelper::getMaxID(tableName, columnName, dbConn-getDatabase); }}void frmDbCreat::on_btnDo_clicked{ if (!dbConn-getOk) { return; } QString sql = AppConfig::SqlColumn2 + " " + AppConfig::SqlValue2; //qDebug TIMEMS sql; QStringList sqls; for (int i = 0; i AppConfig::Count2; ++i) { QString temp = sql; //替换自增ID maxID++; temp.replace("AUTO_INCREMENT", QString::number(maxID)); //替换时间 temp.replace("DATETIME", DATETIME); sqls temp; } dbConn-append(sqls);}void frmDbCreat::on_btnCount_clicked{ dbConn-selectCount("LogInfo", "LogID", "where 1=1");}void frmDbCreat::on_btnStart_clicked{ if (ui-btnStart-text == "启动服务") { on_btnDo_clicked; timer-start; ui-btnStart-setText("停止服务"); } else { timer-stop; ui-btnStart-setText("启动服务"); }}

相关文章

“天眼查”未经允许和授权在网上公示“他人”信息,作为民营公司平台合法吗?

首先,这个是不违法的,至于题注说的这个信息,其实是属于 公共展示的信息, 法律上的规定是,抓取公共展示的信息不违法,允许抓取网站内容,对公众展示内容必须提供来源及源站地址,若有版权纠纷,必须配合版权方进行内容下架,否则可以到工信部投诉举报侵权网站,投诉多了有取消域名备案的风险。 信息公开本身也是政府...

常用双绞线有哪几类?

双绞线常见的有3类线,5类线和超5类线,以及最新的6类线,前者线径细而后者线径粗,型号如下: 1)一类线:主要用于语音传输(一类标准主要用于八十年代初之前的电话线缆),不同于数据传输。 2)二类线:传输频率为1MHZ,用于语音传输和最高传输速率4Mbps的数据传输,常见于使用4MBPS规范令牌传递协...

什么是turboboost?

turbo boost是英特尔睿频加速技术。英特尔睿频加速技术是英特尔酷睿 i7/i5 处理器的独有特性,也是英特尔新宣布的一项技术。这项技术可以理解为自动超频,当开启睿频加速之后,CPU会根据当前的任务量自动调整CPU主频,从而重任务时发挥最大的性能,轻任务时发挥最大节能优势。英特尔官方对此技术的...

100块左右的鼠标和500多的使用起来有什么区别吗?

鼠标便宜的50元以内都可以买到,贵的却能达到近千元,很多人觉得便宜鼠标和高端鼠标都一样用,而且用起来差别不大,根本不值得花太多钱去买数百元的鼠标,其实在实际体验中差别最大的就是外观和手感,可能很多人觉得不少100元鼠标做的也很好看,但是只要细看一下做工和材质和500多元的鼠标还是有很明显的区别的,而...

电玩如何选择?

第一点 看CPU处理器参数,一般现在处理器分为奔腾,酷睿i3,i5,i7这几类,CPU直接决定电脑的性能,所以现在i3是比较落后的,最好还是i5或者i7. 第二点 看硬盘存储容量,硬盘存储容量的多少直接决定你的电脑以后能装多少东西,一般市面上都是500GB到1TB的,当然这些是越大越好。 第三点 看...

半个新人求助,佳能单反如何选?

在目前的情况下看,单反的市场价格已经慢慢跌入谷底,准专业级的5D系列中的5D4价格已经很低很低了,很适合入手!不知道是用来拍照还是拍视频,我推荐两种不同拍摄的单反吧! 如果喜欢拍视频的话,80D是不错的选择,它可是拥有5D4性能的最便宜单反了,为什么这么说,拍视频的都知道,轻便是一方面,还有视频参数...

CPU四核是什么意思?

1、双核cpu是基于单个半导体的一个处理器上,拥有两个一样功能的处理器核心。换句话说,将两个物理处理器核心整合入一个核中,形成双核CPU。双核处理器性能强劲,能够显着提高PC的计算性能,在执行多任务操作时,它的这一特点尤其突出。双核处理器在每个时钟周期内可执行的指令数总数,比单核心处理器增加一倍,这...

是否要掌握全部的MySQL工具?

完全没有必要啊,MySQL本质就是一个关系型数据库,只要你会基本的SQL语句,哪个工具都可以轻松操作,就开发来说,大部分使用的都是第三方软件,下面我简单介绍3个非常适合管理MySQL的图形工具,分别是DBeaver、HeidiSQL和DataGrip,感兴趣的朋友可以尝试一下: 免费开源DBeave...

SQL与MySQL有什么区别?

SQL全称是结构化查询语言,MySQL是一个关系型数据库,是一个软件,这是两者最根本的区别,就相当于c++与vc++6.0的区别,一个是语言,一个是基于这种语言实现的的软件。 联系的话,MySQL是基于SQL标准实现的一个数据库管理软件,你可以在上面写SQL语句,练习SQL,基本的增删改查,触发器,...

大家常用哪个MySQL客户端工具,除了命令行那个mysql之外?

常用的mysql客户端工具,这个就非常多了,既有开源免费的,也有商业收费的,下面我简单介绍几个,感兴趣的朋友可以尝试一下: 01、HeidiSQL这是一个非常轻便灵活的mysql客户端工具,完全免费,采用delphi开发而成,目前主要应用于windows平台,界面简洁、清爽,支持常见的mssql、m...

电脑上哪个浏览器比较简洁好用,没有杂七杂八的东西?

电脑上的浏览器使用过的包括以下几款。 Windows自带ie浏览器。这款浏览器现在几乎没有人用了。微软也没有更新,它的界面比较老旧,所以不再推荐。Windows自带edge浏览器。这款浏览器在windows2020出了新版,主要更新内容是换用的谷歌的内核。现在它和谷歌浏览器几乎差不多,而且界面比较美...

选择手机主要看哪些方面?

文/小伊评科技 手机可能已经成为普通用户手中价值最贵的物件了,价值越高的产品在选择的时候就会越“焦虑”,那么本文就详细的教大家如何去选择一款真正让自己称心如意的手机。 01:确定预算和对手机的主要诉求。确定预算和对手机的整体诉求是购买手机之前的最需要去做的事情,因为这直接关乎到选品的大方向,如果预算...