最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt數據庫應用之實現(xiàn)通用數據庫清理

 更新時間:2022年02月23日 09:15:16   作者:feiyangqingyun  
項目如果需要存儲很多日志記錄比如運行日志,時間長了記錄數量非常多,數據庫體積不斷增大,對應數據庫表的增刪改查的效率不斷降低,因此需要將早期的數據清理。本文將詳細介紹一下通用數據庫清理的實現(xiàn),需要的可以參考一下

一、前言

很多項目如果需要存儲很多日志記錄比如運行日志,時間長了記錄數量非常多,數據庫體積不斷增大,對應數據庫表的增刪改查的效率不斷降低,為了消除這幾個影響,需要有一套機制,不斷將早期的數據清理,清理的規(guī)則比如可以指定表名、字段名、時間范圍等。

日志記錄的清理一方面是為了保證查詢效率,畢竟數據量大了明顯影響查詢速度,一方面也是為了節(jié)約磁盤存儲空間,畢竟存儲空間有限,尤其是嵌入式板子,容量一般不會很大,記錄無限制的存儲下去會不斷增加磁盤空間的占用。

除了數據庫記錄的清理以外,還有個場景是文件的清理,比如視頻監(jiān)控系統(tǒng)存儲了很多視頻文件,為了保證磁盤空間的大小,需要不斷清理不需要的早期的視頻文件,以便騰出空間存儲新的文件,相當于覆蓋寫入,這樣就最大化的把磁盤空間利用起來,不會因為磁盤空間不夠而導致的程序不能正常運行。

  1. 可設置要清理的對應數據庫連接名稱和表名。
  2. 可設置條件字段。
  3. 可設置排序字段。
  4. 可設置最大保留的記錄數。
  5. 可設置執(zhí)行自動清理的間隔。
  6. 后期支持多個數據庫和多個表。
  7. 建議條件字段用數字類型的主鍵,速度極快。
  8. 增加統(tǒng)計用字段名稱設置。
  9. 增加自動清理文件夾,超過大小自動刪除文件夾中早期文件。

Qt數據庫相關應用開發(fā)總結

二、功能特點

同時支持多種數據庫比如odbc、sqlite、mysql、postgresql、sqlserver、oracle、人大金倉等。

一個數據庫類即可管理本地數據庫通信,也支持遠程數據庫通信等。

數據庫線程支持執(zhí)行各種sql語句,包括單條和批量。

組件中的所有類打印信息、錯誤信息、執(zhí)行結果都信號發(fā)出去。

集成數據庫通用翻頁類(負責具體處理邏輯),搭配分頁導航控件(負責外觀),形成超級牛逼的翻頁控件。

集成數據庫自動清理類,設定最大記錄數后臺自動清理早期數據。

集成自定義委托類,支持復選框、文本框、下拉框、日期框、微調框、進度條等。

同時支持Qt4-Qt6,親測Qt4.6到Qt6.3任意版本,任意系統(tǒng)和編譯器。

本組件無故障 360天7乘24小時 運行在至少上萬個現(xiàn)場,商業(yè)級別品質保證。

每個類都對應完整詳細的使用示例,注釋詳細,非常適合閱讀學習。

可以作為獨立的程序運行,比如自動清理早期數據,同步數據到云端。

全部線程處理,不卡界面,自動重連數據庫。

普通測試情況,sqlite數據庫,數據庫發(fā)生器每秒鐘插入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

四、效果圖

五、相關代碼

void frmDbClean::on_btnOpen_clicked()
{
    if (ui->btnOpen->text() == "打開數據庫") {
        DbInfo dbInfo;
        dbInfo.connName = this->objectName();
        dbInfo.dbName = AppConfig::DbName3;
        dbInfo.hostName = AppConfig::HostName3;
        dbInfo.hostPort = AppConfig::HostPort3;
        dbInfo.userName = AppConfig::UserName3;
        dbInfo.userPwd = AppConfig::UserPwd3;

        QString dbType = AppConfig::DbType3.toUpper();
        if (dbType == "SQLITE") {
            dbInfo.dbName = DbHelper::getDbDefaultFile();
        }

        dbClean->setConnInfo(DbHelper::getDbType(dbType), dbInfo);
        if (dbClean->openDb()) {
            //dbClean->start();
            ui->btnOpen->setText("關閉數據庫");
        } else {
            QString error = dbClean->getDatabase().lastError().text();
            QUIHelper::showMessageBoxError("打開數據庫失敗!\n" + error, 3);
        }
    } else {
        dbClean->stop();
        dbClean->closeDb();
        ui->btnOpen->setText("打開數據庫");
        ui->btnStart->setText("啟動服務");
        on_btnClear_clicked();
    }

    QTimer::singleShot(100, this, SLOT(getTables()));
    QTimer::singleShot(1000, this, SLOT(on_btnStart_clicked()));
}

void frmDbClean::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 frmDbClean::getTables()
{
    if (!dbClean->getOk()) {
        return;
    }

    //取出數據庫對應的表集合
    QStringList tables = dbClean->getDatabase().tables();
    ui->cboxTables->clear();
    ui->cboxTables->addItems(tables);
    if (tables.contains("LogInfo")) {
        ui->cboxTables->setCurrentIndex(ui->cboxTables->findText("LogInfo"));
    }
}

void frmDbClean::on_btnDo_clicked()
{
    if (!dbClean->getOk()) {
        return;
    }

    QString tableName = ui->cboxTables->currentText();
    QString countName = ui->txtCountName->text();
    QString orderSql = ui->txtOrderSql->text();
    dbClean->setTableName(tableName);
    dbClean->setCountName(countName);
    dbClean->setWhereColumnName(countName);
    dbClean->setOrderSql(orderSql);

    //最大保留記錄數量
    dbClean->setMaxCount(AppConfig::Count3 * 10000);
    //清理間隔
    dbClean->setCleanInterval(AppConfig::Interval3);
    dbClean->cleanData();
}

到此這篇關于Qt數據庫應用之實現(xiàn)通用數據庫清理的文章就介紹到這了,更多相關Qt數據庫清理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++按照正態(tài)分布來排列整型數組元素

    C++按照正態(tài)分布來排列整型數組元素

    這篇文章主要介紹了C++按照正態(tài)分布來排列整型數組元素的相關資料,需要的朋友可以參考下
    2016-07-07
  • C語言技巧提升之回調函數的掌握

    C語言技巧提升之回調函數的掌握

    這篇文章主要為大家詳細介紹一下C語言中回調函數的用法教程,文中的示例代碼講解詳細,對我們學習C語言有一定幫助,需要的可以參考一下
    2022-12-12
  • C++圖書管理系統(tǒng)程序源代碼

    C++圖書管理系統(tǒng)程序源代碼

    這篇文章主要為大家詳細介紹了C++圖書管理系統(tǒng)程序源代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++基礎入門教程(八):函數指針

    C++基礎入門教程(八):函數指針

    這篇文章主要介紹了C++基礎入門教程(八):函數指針,本文講解了函數原型和函數定義、const限定符與指針、函數的指針參數、為什么要使用指針參數等內容,需要的朋友可以參考下
    2014-11-11
  • C語言掃雷詳細代碼分步實現(xiàn)流程

    C語言掃雷詳細代碼分步實現(xiàn)流程

    掃雷是電腦上很經典的游戲,特意去網上玩了一會,幾次調試之后,發(fā)現(xiàn)這個比三子棋要復雜一些,尤其是空白展開算法上和堵截玩家有的一拼,與實際游戲差別較大,不能使用光標,下面來詳解每一步分析
    2022-02-02
  • C語言讀取文件流的相關函數用法簡介

    C語言讀取文件流的相關函數用法簡介

    這篇文章主要介紹了C語言讀取文件流的相關函數用法簡介,包括fread()函數和feof()函數的使用,需要的朋友可以參考下
    2015-08-08
  • C++之預處理功能詳解

    C++之預處理功能詳解

    預處理器是 C++ 編譯器提供的一個工具,允許程序員在編譯之前對源代碼文件做出修改,本文將給大家通過代碼示例詳細介紹C++的預處理功能,需要的朋友可以參考下
    2023-05-05
  • 詳解在VScode中添加代碼塊(含C++指令生成代碼)

    詳解在VScode中添加代碼塊(含C++指令生成代碼)

    這篇文章主要介紹了詳解在VScode中添加代碼塊(含C++指令生成代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 實現(xiàn)Dijkstra算法最短路徑問題詳解

    實現(xiàn)Dijkstra算法最短路徑問題詳解

    這篇文章主要介紹了實現(xiàn)Dijkstra算法最短路徑問題詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C語言進階教程之字符串&內存函數

    C語言進階教程之字符串&內存函數

    對于字符,在計算機內部都是用數字(字符編碼)來表示的,而字符串是“字符連續(xù)排列”的一種表現(xiàn),這篇文章主要給大家介紹了關于C語言進階教程之字符串&內存函數的相關資料,需要的朋友可以參考下
    2021-09-09

最新評論

巴里| 永春县| 丰顺县| 平原县| 北流市| 连平县| 黄平县| 乌拉特后旗| 衢州市| 白银市| 巴彦县| 民丰县| 织金县| 怀集县| 尼玛县| 四平市| 绍兴市| 苏尼特左旗| 长宁县| 且末县| 雷山县| 江陵县| 大厂| 玉环县| 胶南市| 和龙市| 蕉岭县| 高要市| 凌海市| 池州市| 革吉县| 崇明县| 九龙城区| 宁远县| 明水县| 盐源县| 江西省| 米林县| 辽宁省| 虞城县| 营山县|