当前位置: 首页 > news >正文

QT表格显示MYSQL数据库源码分析(七)

一. 连接MySQL数据库

首先,创建了一个QSqlDatabase对象,并设置数据库类型为"QMYSQL"。然后,它设置了数据库的主机名,端口号,数据库名,用户名和密码。最后,尝试打开数据库连接,并根据连接是否成功输出相应的信息。如果连接失败就会弹出警告框并输出错误信息

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("47.116.118.86");      //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)db.setPort(3306);                 //连接数据库端口号,与设置一致db.setDatabaseName("qtsql");      //连接数据库名,与设置一致db.setUserName("qt");          //数据库用户名,与设置一致db.setPassword("zhongkeruihe");    //数据库密码,与设置一致bool ok = db.open();if (ok){// QMessageBox::information(this, "infor", "success");qDebug()<<"success";}else {QMessageBox::information(this, "警告!", "DataBase Open Failed,Check whether there is a database or whether the parameters are correct!!!");qDebug()<<"error open database because"<<db.lastError().text();//ui->label->setText(db.lastError().text());}

二. 查询表中数据并在tableView中显示

定义一个成员函数,属于一个名为database的类,这个函数的作用是从数据库中查询所有的数据,并将结果显示在一个名为tableView的表格视图上。具体步骤是:

1. 创建一个QSqlQueryModel对象,命名为tableModel。QSqlQueryModel是Qt框架中的一个模型类,用于处理数据库查询结果

2. 定义一个字符串strSelectData,内容是SQL查询语句"select * from qtdata"。这条语句表示从名为qtdata的表中选择所有列的数据

3. 使用tableModel->setQuery(strSelectData)方法,将查询语句设置到tableModel对象中

4. 调用ui->tableView->setModel(tableModel)方法,将tableModel设置为tableView的模型。这样,tableView就会显示tableModel中的查询结果。

//查询所有并放入表中
SelectAllPushTableData();void database::SelectAllPushTableData(){tableModel = new QSqlQueryModel;//定义一个数据库模型,指定父对象QString strSelectData = "select * from qtdata";tableModel->setQuery(strSelectData);ui->tableView->setModel(tableModel);
}

三. 定义多个槽函数

定义多个按钮对应的槽函数,比如更新数据,插入数据和删除数据等。

bool database::clearDBTable()

这个函数作用是清除数据库表中的数据,并且按钮按下后,会弹出弹框,提醒是否确认选择

void database::SelectData()

在设定的时间范围内查找这一范围内的表中的数据

void database::on_select_val_bt_clicked()

在两个下拉框值的范围内搜索表中在这一范围内的数据,并且在tableview中显示

#include "database.h"
#include "ui_database.h"#include <QMessageBox>
#include <QDebug>
#include <QSqlError>database::database(QWidget *parent) :QWidget(parent),ui(new Ui::database)
{ui->setupUi(this);qDebug()<<QSqlDatabase::drivers();
//    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
//    db.setDatabaseName("test");QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("47.116.118.86");      //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)db.setPort(3306);                 //连接数据库端口号,与设置一致db.setDatabaseName("qtsql");      //连接数据库名,与设置一致db.setUserName("qt");          //数据库用户名,与设置一致db.setPassword("zhongkeruihe");    //数据库密码,与设置一致//    db.setHostName("47.116.118.86");
//    db.setPort(3306);
//    db.setDatabaseName("qtsql");
//    db.setUserName("qt");
//    db.setPassword("zhongkeruihe");bool ok = db.open();if (ok){// QMessageBox::information(this, "infor", "success");qDebug()<<"success";}else {QMessageBox::information(this, "警告!", "DataBase Open Failed,Check whether there is a database or whether the parameters are correct!!!");qDebug()<<"error open database because"<<db.lastError().text();//ui->label->setText(db.lastError().text());}//查询所有并放入表中SelectAllPushTableData();//初始化表格 格式
//     ui->tableView->setColumnWidth(0,80);
//     ui->tableView->setColumnWidth(1,150);
//     ui->tableView->setColumnWidth(2,70);
//     ui->tableView->setColumnWidth(3,70);
//     ui->tableView->setColumnWidth(4,70);
//     ui->tableView->setColumnWidth(5,70);
//     ui->tableView->setColumnWidth(6,70);
//     ui->tableView->setColumnWidth(7,70);/*初始化下拉框*/ui->comboBox_2->addItem("温度");ui->comboBox_2->addItem("湿度");ui->comboBox_2->addItem("光照强度");ui->comboBox_2->addItem("二氧化碳");ui->comboBox->addItem("水位");ui->comboBox_2->addItem("位置");ui->comboBox_2->addItem("亮度");ui->comboBox_2->addItem("通风");ui->comboBox_2->addItem("喷淋");ui->comboBox_2->addItem("雾培");ui->comboBox_2->addItem("水加热");ui->comboBox_2->addItem("位置变化");ui->comboBox_2->addItem("温度变化");/*设置日期查询的初始化*/ui->dateTimeEdit_2->setDateTime(QDateTime::currentDateTime().addSecs(0));ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime().addSecs(0));setFixedSize(750,650);setWindowTitle("——数据库管理平台——");
}void database::SelectAllPushTableData(){tableModel = new QSqlQueryModel;//定义一个数据库模型,指定父对象QString strSelectData = "select * from qtdata";tableModel->setQuery(strSelectData);ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);ui->tableView->setModel(tableModel);}//void database::UpdataToDataBase(QString Stemp,QString Shumi,QString Slight,QString Ssoil,QString Smq2,QString Srain)
//{
//    float val[6];//    val[0] = Stemp.toFloat();
//    val[1] = Shumi.toFloat();
//    val[2] = Slight.toFloat();//    val[3] = Ssoil.toFloat();
//    val[4] = Smq2.toFloat();
//    val[5] = Srain.toFloat();//   // qDebug()<<val[0]<<" "<<val[1]<<" "<<val[2]<<" "<<val[3]<<" "<<val[4]<<" "<<val[5]<<" "<<" ";//    //插入
//    insertData(val);//    //查询并全部显示
//    SelectAllPushTableData();//}插入数据
//bool database::insertData(float val[14])
//{
//    QSqlQuery query;//    //QDateTime currentTime = QDateTime::currentDateTime();//    QString stInsertData = "insert into qtdata values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
//    query.prepare(stInsertData);//准备SQL语句//    query.addBindValue(val[0]);
//    query.addBindValue(val[1]);
//    query.addBindValue(val[2]);
//    query.addBindValue(val[3]);
//    query.addBindValue(val[4]);
//    query.addBindValue(val[5]);
//    query.addBindValue(val[6]);
//    query.addBindValue(val[7]);
//    query.addBindValue(val[8]);
//    query.addBindValue(val[9]);
//    query.addBindValue(val[10]);
//    query.addBindValue(val[11]);
//    query.addBindValue(val[12]);
//    query.addBindValue(QDateTime::currentDateTime().addSecs(0).toString("yyyy-MM-dd hh:mm:ss"));
//    // query.addBindValue()方法将各个值绑定到SQL语句中的占位符//    // query.exec()执行SQL语句,如果执行失败,将输出错误信息
//    if(!query.exec())
//    {
//        qDebug()<<query.lastError();
//    }
//    return true;
//}//清空表
bool database::clearDBTable()
{QSqlQuery query;QString strClearDB = "delete from qtdata";//创建一个消息框,询问用户是否确认操作QMessageBox::StandardButton reply;reply = QMessageBox::question(this,"清除数据","确定要清除表中数据?",QMessageBox::Yes|QMessageBox::No);//根据用户的选择执行相应的操作if (reply == QMessageBox::Yes){query.prepare(strClearDB);}else if(reply == QMessageBox::No){}if(!query.exec()){qDebug()<<query.lastError();}return true;
}//日期查询
void database::SelectData()
{tableModel = new QSqlQueryModel;//定义一个数据库模型,指定父对象QString startTime = ui->dateTimeEdit->text();QString startTime2 = ui->dateTimeEdit_2->text();//查询操作QString strSelectData = "select *from qtdata where CurrenTime between '"+startTime+"' and '"+startTime2+"';";tableModel->setQuery(strSelectData);ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);ui->tableView->setModel(tableModel);
}database::~database()
{delete ui;
}//退出
void database::on_exit_bt_clicked()
{this->close();
}//查询按钮  ->查询指定日期
void database::on_select_data_bt_clicked()
{SelectData();
}//显示所有
void database::on_displayAll_bt_clicked()
{SelectAllPushTableData();
}//now
void database::on_now_bt_clicked()
{//当前时间ui->dateTimeEdit_2->setDateTime(QDateTime::currentDateTime().addSecs(0));
}
//最近一天
void database::on_currDay_bt_clicked()
{//上一天ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime().addSecs(-3600*24));//当前时间ui->dateTimeEdit_2->setDateTime(QDateTime::currentDateTime().addSecs(0));SelectData();
}
//最近三天
void database::on_currThDay_bt_clicked()
{//三天前天ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime().addSecs(-3600*24*3));//当前时间ui->dateTimeEdit_2->setDateTime(QDateTime::currentDateTime().addSecs(0));SelectData();
}
//最近一周
void database::on_currWeek_bt_clicked()
{//七天前ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime().addSecs(-3600*24*7));//当前时间ui->dateTimeEdit_2->setDateTime(QDateTime::currentDateTime().addSecs(0));SelectData();
}//条件查询
void database::on_select_val_bt_clicked()
{//获取索引值QString strNum = ui->comboBox_2->currentText();//获取上下值QString downNum = ui->spinBox->text();QString upNum = ui->spinBox_2->text();//查询操作QString strSelectData = "select *from qtdata where "+strNum+" >= "+downNum+" && "+strNum+"<="+upNum+";";tableModel->setQuery(strSelectData);ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);ui->tableView->setModel(tableModel);
}//添加
/*
void database::on_add_bt_clicked()
{//插入数据// insertData();//查询并显示SelectAllPushTableData();
}*///清空表按钮
void database::on_clear_bt_clicked()
{clearDBTable();SelectAllPushTableData();
}

相关文章:

QT表格显示MYSQL数据库源码分析(七)

一. 连接MySQL数据库 首先&#xff0c;创建了一个QSqlDatabase对象&#xff0c;并设置数据库类型为"QMYSQL"。然后&#xff0c;它设置了数据库的主机名&#xff0c;端口号&#xff0c;数据库名&#xff0c;用户名和密码。最后&#xff0c;尝试打开数据库连接&#x…...

excel系列(三) - 利用 easyexcel 快速实现 excel 文件导入导出

一、介绍 在上篇文章中&#xff0c;我们介绍了 easypoi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款更优秀的 excel 工具库&#xff1a;easyexcel 。 二、easyexcel easyexcel 是阿里巴巴开源的一款 excel 解析工具&#xff0c;底层逻辑也是基于 apache p…...

探索前后端数据传输模式:Java、Go与Python的实践20240719

深入解析前后端数据传输&#xff1a;Java、Go与Python的实践 引言 在当今的互联网时代&#xff0c;用户对Web应用的性能和交互体验有着越来越高的要求。无论是信息展示型网站还是复杂的企业应用&#xff0c;前后端数据传输的效率和模式选择都至关重要。本文将深入探讨三种主流…...

【YashanDB知识库】yac修改参数后关闭数据库hang住

【标题】yac修改参数后关闭数据库hang住 【问题分类】性能优化 【关键词】YashanDB, yac, shutdown hang 【问题描述】修改yac参数后执行shutdown immediate&#xff0c;数据库hang住。 【问题原因分析】 Shutdown操作时&#xff0c;线程在获取gInstance->trigger->s…...

提升网站性能:ThinkPHP6中如何实现Mysql分页查询

随着互联网的快速发展&#xff0c;web应用程序的开发也越来越复杂。而分页查询是web应用程序中常见的功能之一。thinkphp6是一个web框架&#xff0c;可以帮助开发人员快速开发应用程序。在本文中&#xff0c;我们将讨论如何在thinkphp6中使用mysql进行分页查询。 首先&#xf…...

Python:Flask自定义URL路由参数过滤器

目录 简单的例子手动类型转换自动类型转换自定义路由过滤器 简单的例子 先看一个简单的例子&#xff0c;GET请求需要传递一个参数&#xff0c;我们直接获取的是字符串 from flask import Flaskapp Flask(__name__)app.get("/<value>") def index(value):ret…...

闭包与装饰器

一.闭包&#xff1a; 闭包是Python中的一种高级特性&#xff0c;指的是在函数内部定义了另外一个函数&#xff0c;并返回了这个内部函数作为函数对象&#xff0c;同时还保存了外层函数的状态信息。这个内部函数可以依赖外层函数的变量和参数&#xff0c;而且外层函数返回的是这…...

DNS服务器的搭建

1、DNS服务器端软件 DNS 的域名解析都是 udp/53 . 主从之间的数据传输默认使 ⽤tcp/53 DNS服务器端软件&#xff1a; Bind是⼀款开放源码的DNS服务器软件&#xff0c;Bind由美国加州⼤学Berkeley&#xff08;伯克 利&#xff09;分校开发和维护的&#xff0c;全名为Berkele…...

【JavaScript】点击穿透

点击穿透是指在某些场景下&#xff0c;⽤户在快速点击⻚⾯元素时&#xff0c;由于某些原因&#xff08;例如⽹络延迟&#xff09;&#xff0c; 在前⼀个元素上的点击事件还没有完成时&#xff0c;下⼀个元素的点击事件就已经触发了&#xff0c;导致⽤户感 觉到⻚⾯点击⽆效或者…...

[Linux]Mysql之主从同步

AB复制 一、主从复制概述 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一般是准实时的业务数据库。 主从复制的作用 1.做数据的热备&#xff0c;作为后备数据库&#xff0c;主数据库服务器故障后&#xf…...

DAY21-二叉树

LeetCode538.把二叉搜索树转换为累加树 public TreeNode convertBST(TreeNode root) {reverseIn(root);return root;}public Integer value0,flag0;public void reverseIn(TreeNode root) {if(rootnull) return ;reverseIn(root.right);if(flag0) {valueroot.val;flag1;}else {…...

java面试-场景题

一、集合 1. java中如何给一个超大的一个亿左右的list数据去重&#xff1f; 我当时的回答是使用HashSet或Stream流的distinct语法。但是面试官好像更注重内存的消耗问题。 使用HashSet&#xff1a; HashSet 是一个不允许有重复元素的集合。你可以将List中的元素添加到HashSe…...

【TORCH】matplotlib绘制一条横线的两种方法

在创建图形和数据可视化时&#xff0c;你提到的两种方法都用于绘制特定的线条&#xff0c;但它们在实现方式上有所不同。我将逐一解释这两种方法的具体含义和用途。 1. 使用列表创建常数值的线条 y [1] * len(x)这行代码生成了一个列表 y&#xff0c;其长度与 x 相同&#x…...

深入浅出mediasoup—WebRtcTransport

mediasoup 提供了多种 transport&#xff0c;包括 WebRtcTransport、PipeTransport、DirectTransport、PlainTransport 等&#xff0c;用来实现不同目的和场景的媒体通信。WebRtcTransport 是 mediasoup 实现与 WebRTC 客户端进行媒体通信的对象&#xff0c;是 mediasoup 最重要…...

如何让局域网中的其他电脑访问VMWare虚拟机上的Windows虚拟系统

场景描述 事情是这样的&#xff0c;我在我的主机&#xff08;Win10&#xff09;上搭建了一个VMWare虚拟机&#xff0c;并安装了Windows Server的虚拟系统&#xff0c;想用它来测试一些东西。但是呢&#xff0c;我发现尽管我的主机可以愉快地跟这个服务器对话&#xff0c;可办公…...

旧电脑回收前怎么清除数据

随着技术的快速更新换代&#xff0c;很多人的电脑也会不断的更新升级&#xff0c;比如给电脑升级硬件或是更换新电脑&#xff0c;从而获得更好的性能和体验。那么旧的电脑及电脑部件怎么处理更安全呢&#xff1f;我们要确保旧电脑上的个人数据被彻底清除干净&#xff0c;这样可…...

python——TinyDB

TinyDB 是一个轻量级的纯 Python 写入的文档数据库。它不需要单独的服务器进程或复杂的配置&#xff0c;只需导入模块即可开始使用。TinyDB 适合于小型项目或测试用例&#xff0c;它的数据存储在本地文件中。 TinyDB 的基本 API 和使用方式&#xff1a; 初始化数据库 from tin…...

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十八章 驱动模块编译进内核

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…...

Mailspring搭建安装教程:打造个性邮件体验

Mailspring搭建安装教程步骤&#xff01;如何选择电子邮件服务商&#xff1f; Mailspring作为一款功能强大、界面友好的邮件客户端&#xff0c;成为了许多用户的首选。AokSend将为大家提供详细的Mailspring搭建安装教程&#xff0c;帮助您打造个性化的邮件体验。 Mailspring搭…...

【分布式锁】Redission实现分布式锁

接着上一节&#xff0c;我们遇到了超卖的问题&#xff0c;并通过Redis实现分布式锁&#xff0c;进行了解决。本节 我将换一种方式实现分布式锁。 前提&#xff1a; nginx、redis、nacos 模块1&#xff1a; provider-and-consumer 端口 8023 模块2 rabbitmq-consumer 端口 8021 …...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...