Qt数据库应用12-通用数据库清理

2022-05-08科技135

## 一、前言很多项目如果需要存储很多日志记录比如运行日志,时间长了记录数量非常多,数据库体积不断增大,对应数据库表的增删改查的效率不断降低,为了消除这几个影响,需要有一套机制,不断将早期的数据清理,清理的规则比如可以指定表名、字段名、时间范围等。

日志记录的清理一方面是为了保证查询效率,毕竟数据量大了明显影响查询速度,一方面也是为了节约磁盘存储空间,毕竟存储空间有限,尤其是嵌入式板子,容量一般不会很大,记录无限制的存储下去会不断增加磁盘空间的占用。

除了数据库记录的清理以外,还有个场景是文件的清理,比如视频监控系统存储了很多视频文件,为了保证磁盘空间的大小,需要不断清理不需要的早期的视频文件,以便腾出空间存储新的文件,相当于覆盖写入,这样就最大化的把磁盘空间利用起来,不会因为磁盘空间不够而导致的程序不能正常运行。

1. 可设置要清理的对应数据库连接名称和表名。

2. 可设置条件字段。

3. 可设置排序字段。

4. 可设置最大保留的记录数。

5. 可设置执行自动清理的间隔。

6. 后期支持多个数据库和多个表。

7. 建议条件字段用数字类型的主键,速度极快。

8. 增加统计用字段名称设置。

9. 增加自动清理文件夹,超过大小自动删除文件夹中早期文件。

## 二、功能特点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秒,不同线程互不干扰。

## 三、体验地址2. 国内站点:[)

3. 国际站点:[)

## 四、效果图

## 五、相关代码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;}

相关文章

如何查开酒店记录?

一、如果要查询酒店开房记录,当地民警在公安机关的内部网上可以查到。   二、如果要到旅店查阅,持警察证就可以查。   三、查询自己的开房记录只需提供身份证号码,可查询到此身份证号在XX城市 XX宾馆 XX号房间,曾经登记过的住宿记录。查询同住人开房信息业务联系客服。   四、民警使用数字证书,可以在...

派出所不开无犯罪记录证明该怎么办?

公安派出所出具有无违法犯罪记录证明是一件非常严肃的事情,之所以不予出具可能包含着两种可能:第一、不符合出具该证明的情形;第二、当事人有违法犯罪前科记录。 长久以来,各种“奇葩”证明一直困扰着基层公安机关。2015年8月,为了规范证明出具工作,公安部通过其“打四黑除四害”官方微博对外发布了一则博文,即...

网上被骗了该怎么报警,报警有用吗?

可以去当地公安机关直接报案;也可以拨打110报案;还可以在网上向公安机关报案。直接去当地的派出所报案,报警还是有一定作用的。 1、无论被骗金额多少,首先保留被骗证据。如:通信记录、聊天记录、转账或汇款记录等。 2、也建议去派局所报案并提供有效证据。当受害人数、涉及金额累计达到一定数额时也将被立案调查...

什么是第一手史料?

第一手史料,也叫原始史料,是历史发生最初的、最原始的记录。 我们现在所看到的史书,都是后世参照不同的资料编写的。不如史记,参照了不同的资料,但是由于作者所处的时代、立场以及环境等因素的影响,不可避免的会掺杂个人情感、由于资料年代原因等造成跟事实有一定出入等。 比如在史记中描述的陈胜吴广起义,是因为秦...

有每天坚持写日记的朋友吗?写日记有什么好处?

您好,很乐意与您交流。从2007年以来,我坚持每天写日记,到今天,已接近13年了,并且是先用手写,后用微机打印,电脑保存。总结自己写日记的好处,可以归结为以下几个方面: 一是可以完整的记录自己的人生。13年来,我详细记录了包括自己的工作、生活和学习在内的方方面面,日记成为了自己人生的一本”活字典”。...

案底、前科、犯罪记录、无犯罪记录证明是指什么?有什么区别?

一、案底并不是一个法律概念,只是我们生活化的语言,对其内涵、外延不好界定。根据百度百科的解释,其内涵还是侧重于“犯罪记录”。但是,我们生活中又经常使用这个概念,并不时还影响我们的个人生活、信用,那么有必要好好理一理。 根据我个人的理解,案底应该是公民涉嫌违法、犯罪后在国家机关留下的一切信息、痕迹的总...

通过身份证可以查询全国开房记录吗?

身份证号查开房记录是可以查到的,一般的开房都需要身份证。只要登记了,在派出所里都可以查到。 查询办法 需要到派出所查询。如果入住宾馆时有登记,并且有登记进入管理网络,那就完全可以查到个人信息。但是只有涉及到犯罪的或者有犯罪嫌疑的才能查,私人是不允许查询他人的开房记录的,否则就是侵犯个人隐私了。 避免...

什么是日记?

日记即每天所遇到的和所做的事情的记录,有的兼记对这些事情的感受。每天或经常把发生的事、处理的事务或观察的东西写下来的记录,尤指个人活动、思考或感觉的每日记录。 写日记的意义: 一、首先是培养毅力。毛泽东同志曾说过:“一个人做点好事并不难,难的是一辈子做好事。”强调了坚持不懈的重要性。同样,一个人坚...

记日记的软件哪个好?

写日记是一个非常好的习惯,长期坚持下来不仅可以记录自己的生活,还可以提高自己的写作能力。一起大部分人都是使用纸质的笔记本来记录日记,但是纸质笔记本容易搞丢,并且保密性不强,不易保存和收藏。 随着电脑和手机的普及,还多的喜欢写日记的把日记记录转移到收集和电脑上进行记录,日记电子化的好处是我们可以很方便...

鹿晗创的是什么吉尼斯世界纪录?

鹿晗的三项世界吉尼斯记录分别是:1、第一次是在2014年8月5日,鹿晗在2012年9月10日转发自曼彻斯特联队球迷俱乐部的微博共获得了13163859条评论,成为中文社交媒体上的首位吉尼斯世界纪录获得者。2、第二次是在2015年9月25日,吉尼斯世界纪录正式宣布鹿晗于2012年转发的一条微博,截至9...

国乒三剑客马龙、张继科、许昕你更喜欢谁?

个人来讲,我更喜欢张继科一点,虽然马龙的实力更强,荣誉更多,但是张继科桀骜不驯、凶悍的样子,更招我稀罕一些,可能是我心里也有一些逆反心理吧,反正就是不讲道理的更喜欢张继科一些。 男乒已经从龙獒蟒时代过渡到龙蟒胖时代,未来小胖樊振东将接过男乒的大旗,继续创造辉煌! 但是国乒人气最高的还是龙獒蟒,小狼狗...

如何使用MySQL数据库?

两种方式,一种是MySQL自带的命令行窗口,一种是图形用户管理工具,前者类似于一个cmd窗口,日常管理维护数据库不是很方便,后者就是一个图形用户管理软件,种类繁多,使用起来也相对容易一些,下面我简单介绍一下这2种方式: 命令行窗口1.这个MySQL一般会自带,安装完MySQL后,直接可以在开始菜单中...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。