中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt數據庫中如何實現通用數據庫請求

發布時間:2022-03-22 11:03:17 來源:億速云 閱讀:170 作者:小新 欄目:開發技術

小編給大家分享一下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

四、效果圖

Qt數據庫中如何實現通用數據庫請求

五、相關代碼

#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<QString, QString> tables;
    tables.insert("NodeData", "PositionID,NodeValue,NodeStatus,SaveTime");
    dbHttp->setTables(tables);
}

void frmDbHttp::initConfig()
{

}

void frmDbHttp::saveConfig()
{

}

void frmDbHttp::initTable()
{
    QStringList columnNames;
    columnNames << "位號" << "當前值" << "狀態" << "時間";
    QList<int> 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數據庫中如何實現通用數據庫請求”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦北县| 甘孜县| 子洲县| 吉安县| 延边| 永善县| 留坝县| 洛浦县| 雷波县| 绥德县| 衡南县| 治多县| 茂名市| 东山县| 东阿县| 乌审旗| 巴楚县| 兰溪市| 葵青区| 金湖县| 三穗县| 宁武县| 江口县| 刚察县| 娱乐| 二连浩特市| 凤庆县| 甘肃省| 霸州市| 吉安县| 通化市| 海淀区| 沧源| 日土县| 绵阳市| 遂平县| 平潭县| 乌兰浩特市| 景谷| 高州市| 双城市|