QT连接数据库并对数据库进行数据展示

该文介绍了如何使用QT5.9.932位版本连接到MySQL5.6数据库,包括直接连接(QMYSQL驱动)和通过ODBC连接(QODBC驱动)两种方法。在直接连接时可能会遇到问题,而ODBC连接提供了一种替代方案。文章还展示了读取、写入数据库的基本操作以及如何在QT界面中用表格展示数据库数据。
摘要由CSDN通过智能技术生成

前言

  • QT版本 5.9.9 32位
  • 数据库 MySQL5.6

1. QT连接数据库

1.1 直接连接(大部分会失败)

  1. 创建空widget窗口
  2. 在.pro文件下添加sql模块
QT       += core gui sql
  1. widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QDebug>

 Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //连接本地主机
    db.setPort(3306);
    db.setDatabaseName("数据库名");
    db.setUserName("用户名");
    db.setPassword("密码");
        bool ok = db.open();
        if (ok){
            qDebug()<<"sucess open database ";
        }
        else {
            qDebug()<<"error open database ";
        }
}

Widget::~Widget()
{
    delete ui;
}


  1. 运行编译,如果输出sucess open database表示连接成功
    否则失败,若报如下错误,建议直接采用第二种方法连接
    在这里插入图片描述

1.2 ODBC连接

  1. ODBC下载 官网下载
  2. 选择Qt对应的32位或64位版本,我这里选择32位,下载完成后直接安装就行
    在这里插入图片描述
    在这里插入图片描述
  3. 打开ODBC连接数据库,32位安装后可能也有64位的,不要选错了,选择32bit的
    在这里插入图片描述
    在这里插入图片描述
  4. 输入数据库信息
    Data Source Name 是之后代码中 db.setDatabaseName参数,最好设置与所连接的数据库名一样,好理解
    在这里插入图片描述
  5. 输入完成后点击test测试一下看是否连接成功,
    在这里插入图片描述
  6. QT中连接代码 widget.cpp文件,pro文件中也要加sql
#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        db.setHostName("127.0.0.1");
        db.setHostName("8.130.35.24");        				  
         db.setPort(3306);
       db.setDatabaseName("data"); //不是Database,记得别填错
        db.setUserName("root");
        db.setPassword("****");
        bool ok = db.open();
        if (ok){
            qDebug()<<"sucess open database ";
        }
        else {
            qDebug()<<"error open database ";
        }
}

Widget::~Widget()
{
    delete ui;
}


运行,连接成功
在这里插入图片描述

2. 读写数据库操作

  1. 查询表数据
        //查询表数据
          QSqlQuery query;
          query.exec(" select * from users");//users为表名,*为所有列数据,可写列名选择目标列
          while(query.next()){
                 qDebug()<<query.value("ID").toString(); //ID为对应列名称,toString为对应列的数据类型 
                 qDebug(<<query.value("datetime").toString();//同上

  1. 插入表数据
   QSqlQuery query;
   query.exec("insert into door(datetime,ID) values ( '2023-05-08 22:16:58','12')");
  1. 读取表中最新一条数据
    对应的表中必须有时间戳列
          //查询表中的最新一条数据
          QSqlQuery query;
          query.exec("SELECT * FROM door ORDER BY datetime DESC LIMIT 1");//door为表名,datetime为时间戳所在列名,此句实现按datetime列实现降序排列
          query.next();
          qDebug()<<query.value("ID").toString();
          qDebug()<<query.value("datetime").toString();

3.qt中设置表格展示数据库数据

  1. ui界面插入tablewidget 默认名称tablewidget
    在这里插入图片描述
  2. 设置表格参数
        ui->tableWidget->setRowCount(30);//设置行数
        ui->tableWidget->setColumnCount(7);//设置列数
        ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"time"<< "tem"<< "hum"<<"pm1"<< "pm2"<< "pm10"<< "co");//设置表头
        ui->tableWidget->setColumnWidth(0,130);//设置列宽
        ui->tableWidget->setColumnWidth(1,70);
        ui->tableWidget->setColumnWidth(2,70);
        ui->tableWidget->setColumnWidth(3,70);
        ui->tableWidget->setColumnWidth(4,70);
        ui->tableWidget->setColumnWidth(5,70);
        ui->tableWidget->setColumnWidth(6,70);
  1. 设置按钮,点击查询数据库表数据写入表格,在连接数据库成功以后
 connect(ui->bt_chaxun, &QPushButton::clicked,this,&MainWindow::on_bt_chaxun_clicked);
 void MainWindow::on_bt_chaxun_clicked(){
    qDebug()<<connectsqlfalg;
    if(connectsqlfalg){
        QSqlQuery query;
      //读取表中的最新30条数据
          query.exec("SELECT * FROM data ORDER BY datetime DESC LIMIT 30");  //data 为表名  30代表获取30条数据
          for(int i=0;i<30;i++)
          {
              query.next();
              QString tem = query.value("tem").toString();
              QString hum = query.value("hum").toString();
              QString pm1 = query.value("pm1").toString();
              QString pm2 = query.value("pm2").toString();
              QString pm10 = query.value("pm10").toString();
              QString co = query.value("co").toString();
              QString datetime = query.value("datetime").toString();
              int j=0;
              ui->tableWidget->setItem(i,j, new QTableWidgetItem(datetime));//第i行第j列
              j++;
              ui->tableWidget->setItem(i,j, new QTableWidgetItem(tem));
              j++;
              ui->tableWidget->setItem(i,j, new QTableWidgetItem(hum));
              j++;
              ui->tableWidget->setItem(i,j, new QTableWidgetItem(pm1));
              j++;
              ui->tableWidget->setItem(i,j, new QTableWidgetItem(pm2));
              j++;
              ui->tableWidget->setItem(i,j, new QTableWidgetItem(pm10));
              j++;
              ui->tableWidget->setItem(i,j, new QTableWidgetItem(co));

          }

    }
         else
         {
             QMessageBox::critical(this, QLatin1String("Error"), QLatin1String("连接数据库失败"));
         }

}

在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌最俊朗-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值