广告
返回顶部
首页 > 资讯 > 精选 >Qt数据库如何实现通用数据生成器
  • 462
分享到

Qt数据库如何实现通用数据生成器

2023-06-29 06:06:17 462人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关Qt数据库如何实现通用数据生成器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言有两种应用场景需要用到数据生成器,一种是需要测试数据库性能,比如在100万条和1000万条

这篇文章将为大家详细讲解有关Qt数据库如何实现通用数据生成器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、前言

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

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

二、功能特点

同时支持多种数据库比如odbc、sqlite、mysql、postgresql、sqlserver、oracle、人大金仓等。

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

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

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

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

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

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

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

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

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

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

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

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

三、体验地址

体验地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg  提取码:uyes 文件名:bin_dbtool.zip

国内站点:Https://gitee.com/feiyangqingyun

国际站点:https://GitHub.com/feiyangqingyun

四、效果图

Qt数据库如何实现通用数据生成器

五、相关代码

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("启动服务");    }}

关于“Qt数据库如何实现通用数据生成器”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Qt数据库如何实现通用数据生成器

本文链接: https://www.lsjlt.com/news/322957.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt数据库如何实现通用数据生成器
    这篇文章将为大家详细讲解有关Qt数据库如何实现通用数据生成器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言有两种应用场景需要用到数据生成器,一种是需要测试数据库性能,比如在100万条和1000万条...
    99+
    2023-06-29
  • Qt数据库应用之实现通用数据生成器
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 有两种应用场景需要用到数据生成器,一种是需要测试数据库性能,比如在100万条和1000万条记录的时候对比查询或更新...
    99+
    2022-11-13
  • Qt数据库中如何实现通用数据库请求
    小编给大家分享一下Qt数据库中如何实现通用数据库请求,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言数据库请求是在数据库采集的基础上,换成http请求的形式...
    99+
    2023-06-29
  • Qt数据库应用中如何实现通用数据库采集
    小编给大家分享一下Qt数据库应用中如何实现通用数据库采集,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言数据库采集对应的就是上一篇文章的数据库同步,数据库同...
    99+
    2023-06-29
  • Qt数据库应用之实现通用数据库采集
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据库采集对应的就是上一篇文章的数据库同步,数据库同步到云端数据库以后,app、网页、小程序啥的要数据的话,可以通...
    99+
    2022-11-13
  • Qt数据库应用之实现通用数据库清理
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 很多项目如果需要存储很多日志记录比如运行日志,时间长了记录数量非常多,数据库体积不断增大,对应数据库表的增删改查的...
    99+
    2022-11-13
  • Qt数据库应用之实现通用数据库分页
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据库分页展示,在所有的涉及到数据库记录的项目中都是需要的,除了简单的设备信息表、用户信息表这种很少几条几十条数据...
    99+
    2022-11-13
  • Qt数据库应用之实现通用数据库请求
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据库请求是在数据库采集的基础上,换成http请求的形式来获取数据,这样就脱离了数据库组件,而采用的通用的http...
    99+
    2022-11-13
  • Qt怎么实现通用数据库同步
    这篇文章主要介绍“Qt怎么实现通用数据库同步”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Qt怎么实现通用数据库同步”文章能帮助大家解决问题。一、前言数据库同步的主要功能是将本地的数据库记录同步到远...
    99+
    2023-06-29
  • .NET如何生成数据库
    这篇文章给大家分享的是有关.NET如何生成数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。开篇语本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程。采用EFCore作为ORM框架。本次示例环境...
    99+
    2023-06-15
  • 如何实现SQLite数据库访问与生成
    这篇文章将为大家详细讲解有关如何实现SQLite数据库访问与生成,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Xamarin数据库访问方式本节我们将讲解数据库的方式方式以及数据库的生成方法。访问方式Xam...
    99+
    2023-06-03
  • 通过mysql实现excel中的数据生成
    下面一起来了解下通过mysql实现excel中的数据生成,相信大家看完肯定会受益匪浅,文字在精不在多,希望通过mysql实现excel中的数据生成这篇短内容是你想要的。     ...
    99+
    2022-10-18
  • Qt数据库应用之实现数据分组导出
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据分组导出和打印这个需求并不是近期的需求,而是之前做温湿度监控系统的时候提的需求,当然也有几个系统用到了,比如啤...
    99+
    2022-11-13
  • Qt数据库应用之实现数据图文混排
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 除了能够打印基本的文字信息数据到pdf和纸张,越来越多的应用需求还要求能够导出图片,并且要支持图文混排,相当于do...
    99+
    2022-11-13
  • Springboot如何根据实体类生成数据库表
    目录Springboot 实体类生成数据库表第一步:添加springboot-data-jpa和数据库的依赖关系第二步:编写yml文件的配置第三步:实体类中使用的注解第四步:启动项目...
    99+
    2022-11-12
  • Qt数据库应用之实现数据打印到纸张
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据能够打印到pdf文件,当然可以打印到纸张,而且使用qprinter默认就是打印到纸张的,上一篇文章写得功能是打...
    99+
    2022-11-13
  • laravel 从现有的数据库生成模型并通过模型操作数据库
    一:拓展安装 laravel中从现有的数据库生成模型并通过模型操作数据库需要使用到reliese/laravel拓展 reliese/laravel插件地址: https://packagist.org/packages/relie...
    99+
    2023-08-31
    laravel php Powered by 金山文档
  • .NET之生成数据库全流程实现
    开篇语 本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程。采用EFCore作为ORM框架。 本次示例环境:vs2019、net5、mysql 创建项目 本次事例...
    99+
    2022-11-12
  • db_load如何生成数据库文件
    这篇文章主要介绍 db_load如何生成数据库文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!保存虚拟帐号和密码的文本文件无法被系统帐号直接调用。我们需要使用db_load 命令生...
    99+
    2022-10-19
  • Qt数据库应用之实现数据的导入与导出
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 在经历过大大小小十几个甚至几十个纯QtWidget项目后,涉及到数据库相关的项目,几乎都有一个需求,将少量的信息数...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作