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();
}

相关推荐

  1. QT表格显示MYSQL数据库分析

    2024-07-22 10:10:01       17 阅读
  2. Qt分析:QMetaObject实现原理

    2024-07-22 10:10:01       32 阅读
  3. MySQL5.7分析--连接

    2024-07-22 10:10:01       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 10:10:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 10:10:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 10:10:01       45 阅读
  4. Python语言-面向对象

    2024-07-22 10:10:01       55 阅读

热门阅读

  1. Github 2024-07-22开源项目日报Top10

    2024-07-22 10:10:01       14 阅读
  2. 十六、多任务

    2024-07-22 10:10:01       14 阅读
  3. 目标检测的隐形威胁:对抗攻击的深度解析

    2024-07-22 10:10:01       18 阅读
  4. ASP.NET Core Web深度探讨

    2024-07-22 10:10:01       15 阅读
  5. opencv—常用函数学习_“干货“_13

    2024-07-22 10:10:01       19 阅读
  6. 高精度-大整数计算模板

    2024-07-22 10:10:01       18 阅读
  7. Anonymous Informant

    2024-07-22 10:10:01       16 阅读
  8. Oracle(16)什么是视图(View)?

    2024-07-22 10:10:01       20 阅读
  9. kotlin中常见的创建协程的方式

    2024-07-22 10:10:01       13 阅读