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

文章目录

  • 前言
  • 1. QT连接数据库
    • 1.1 直接连接(大部分会失败)
    • 1.2 ODBC连接
  • 2. 读写数据库操作
  • 3.qt中设置表格展示数据库数据

前言

  • 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 
#include 

 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表示连接成功
    否则失败,若报如下错误,建议直接采用第二种方法连接
    QT连接数据库并对数据库进行数据展示_第1张图片

1.2 ODBC连接

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

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
    QT连接数据库并对数据库进行数据展示_第8张图片
  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("连接数据库失败"));
         }

}

QT连接数据库并对数据库进行数据展示_第9张图片
QT连接数据库并对数据库进行数据展示_第10张图片

你可能感兴趣的:(QT上位机界面,mysql,数据库,qt,ui)