千家信息网

Qt数据库中如何实现通用数据库请求

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,小编给大家分享一下Qt数据库中如何实现通用数据库请求,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言数据库请求是在数
千家信息网最后更新 2026年11月04日Qt数据库中如何实现通用数据库请求

小编给大家分享一下Qt数据库中如何实现通用数据库请求,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、前言

数据库请求是在数据库采集的基础上,换成http请求的形式来获取数据,这样就脱离了数据库组件,而采用的通用的http请求的形式从数据库拿数据库,这个通用性就非常广泛了,比如对方用java采集到设备的数据存入数据库,另外一个区域是用的c#采集的数据入库,然后统一规则统一规范约定一个请求机制,定时器或者线程取执行请求,拿到的json数据,挨个取出来结果,数组集合的方式发信号出去。

之前写过的可视化大屏电子看板程序,采用的也是http请求数据库采集的方式拿数据展示,需要多方协作,至于数据库中的数据是谁放的,和大屏程序本身无关,对应既可以是请求的形式存入的数据,也可以是直接数据库写入的方式,即可以是java也可以是c#,大屏UI展示只管取出数据按照规则展示即可,要多漂亮就多漂亮,qss和painter在手,心中有坐标,万物皆painter。

二、功能特点

同时支持多种数据库比如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

四、效果图

五、相关代码

#include "frmdbhttp.h"#include "ui_frmdbhttp.h"#include "quihelper.h"#include "dbhelper.h"#include "dbhttpthread.h"frmDbHttp::frmDbHttp(QWidget *parent) : QWidget(parent), ui(new Ui::frmDbHttp){    ui->setupUi(this);    this->initForm();    this->initConfig();    this->initTable();}frmDbHttp::~frmDbHttp(){    delete ui;}void frmDbHttp::showEvent(QShowEvent *){    static bool isShow = false;    if (!isShow) {        isShow = true;        QTimer::singleShot(100, this, SLOT(on_btnStart_clicked()));    }}void frmDbHttp::initForm(){    ui->frame->setFixedWidth(AppConfig::RightWidth);    QUIHelper::initTableView(ui->tableWidget);    maxCount = 100;    currentCount = 0;    timer = new QTimer(this);    timer->setInterval(1000);    connect(timer, SIGNAL(timeout()), this, SLOT(on_btnDo_clicked()));    //实例化网络请求采集数据通信类    dbHttp = new DbHttpThread(this);    connect(dbHttp, SIGNAL(debug(QString)), this, SLOT(debug(QString)));    connect(dbHttp, SIGNAL(error(QString)), this, SLOT(error(QString)));    connect(dbHttp, SIGNAL(receiveData(QString, QStringList, int)), this, SLOT(receiveData(QString, QStringList, int)));    //设置参数    dbHttp->setUrl("http://127.0.0.1:6000");    QMap tables;    tables.insert("NodeData", "PositionID,NodeValue,NodeStatus,SaveTime");    dbHttp->setTables(tables);}void frmDbHttp::initConfig(){}void frmDbHttp::saveConfig(){}void frmDbHttp::initTable(){    QStringList columnNames;    columnNames << "位号" << "当前值" << "状态" << "时间";    QList columnWidths;    columnWidths << 160 << 100 << 100 << 220;    columnCount = columnNames.count();    ui->tableWidget->setColumnCount(columnCount);    ui->tableWidget->setHorizontalHeaderLabels(columnNames);    for (int i = 0; i < columnCount; i++) {        ui->tableWidget->setColumnWidth(i, columnWidths.at(i));    }}void frmDbHttp::debug(const QString &msg){    QUIHelper::appendMsg(ui->txtMain, 0, msg, maxCount, currentCount);}void frmDbHttp::error(const QString &msg){    QUIHelper::appendMsg(ui->txtMain, 1, msg, maxCount, currentCount);}void frmDbHttp::receiveData(const QString &tag, const QStringList &data, int msec){    QString msg = QString("用时( %1 秒)  标识( %2 )  数据( %3 )").arg(QString::number((double)msec / 1000, 'f', 3)).arg(tag).arg(data.join("|"));    QUIHelper::appendMsg(ui->txtMain, 3, msg, maxCount, currentCount);    //显示到表格中    int count = data.count();    ui->tableWidget->setRowCount(count / columnCount);    int row = -1;    for (int i = 0; i < count; i = i + columnCount) {        row++;        for (int j = 0; j < columnCount; ++j) {            ui->tableWidget->setItem(row, j, new QTableWidgetItem(data.at(i + j)));        }    }}void frmDbHttp::on_btnDo_clicked(){    dbHttp->select("NodeData", "PositionID,NodeValue,NodeStatus,SaveTime");}void frmDbHttp::on_btnStart_clicked(){    if (ui->btnStart->text() == "启动服务") {        on_btnDo_clicked();        timer->start();        ui->btnStart->setText("停止服务");    } else {        timer->stop();        ui->btnStart->setText("启动服务");    }}void frmDbHttp::on_btnClear_clicked(){    QUIHelper::appendMsg(ui->txtMain, 0, "", maxCount, currentCount);}

以上是"Qt数据库中如何实现通用数据库请求"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

数据 数据库 支持 线程 同时 大屏 形式 方式 程序 篇文章 组件 服务 通信 漂亮 信息 内容 地址 控件 站点 结果 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融科技 博彦科技互联网金融 科技互联网产品 关于新基建和互联网科技 深圳科技互联网 成都互联网科技公司 极限挑战互联网科技 碳银互联网科技有限公司 苏州大垚互联网科技 互联网 科技服务平台 昭通云南众福互联网科技有限公司 顶级互联网科技成果有哪些 崇明区互联网教育科技诚信经营 工业互联网山东科技大学 银行科技岗属于互联网吗 互联网科技数字货币 有人说阿里系是互联网科技企业 郑州欣桑互联网科技有限公司 版纳互联网科技选哪家 广州全民伙伴互联网科技有限公司 互联网科技工作委员会副主任毛军 凡科互联网科技 互联网科技有限公司 翻译 开启互联网科技时代小说 温州喔噻互联网科技有限公司 济南有互联网科技公司吗 互联网安防科技感 工业互联网科技创业 科技互联网公司两年变化 北京瑞云互联网科技有限公司
0