Qt从入门到入土(十一) -数据库操作--MySQL

06-01 1365阅读

引言

在Qt6使用MySQL前需要先安装MySQL驱动,详情请看本篇文章Qt6配置MySQL数据库(一文全搞定)-CSDN博客

安装配置好MySQL之后,就可以继续完成接下来的操作了。

MYSQL和SQLITE的区别

MYSQLSQLITE
数据存储在服务器上,通过网络与客户端通信数据存储在本地的单个磁盘文件中,无需服务器进程
需要安装服务器软件,配置较为复杂

部署简单,只需将数据库文件复制到目标位置即可 

Qt使用时需要手动编译驱动

直接使用Qt sql模块

MySQL数据库常用命令

以下是一些常用的 MySQL 命令行操作:

  • 显示所有数据库:

    SHOW DATABASES;

    • 选择数据库:

      USE database_name;

      • 显示当前数据库中的表:

        SHOW TABLES;

        • 创建数据库:

          CREATE DATABASE database_name;

          • 创建表:

            CREATE TABLE students(num INTEGER PRIMARY KEY,name TEXT NOT NULL,age INTEGER,sex TEXT NOT NULL);

            • 插入数据:

              INSERT INTO students (num,name,age,sex) VALUES (1001,"张三",18,"男");

              • 查询数据:

                SELECT * FROM table_name;

                • 更新数据:

                  UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;

                  • 删除数据:

                    DELETE FROM table_name WHERE condition;

                    • 删除表:

                      DROP TABLE table_name;

                      • 退出 MySQL 命令行客户端:

                        EXIT;

                        导入数据库模块

                        在CMakeLists.txt文件中加入以下指令,其中D:/mysql-9.2.0-winx64/include需要改成自己的目录

                        find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Sql)

                        find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)

                        include_directories("D:/mysql-9.2.0-winx64/include")

                        link_directories("D:/mysql-9.2.0-winx64/lib")

                        target_link_libraries(testMySQL PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)

                         如果使用qmake编译,则在.pro文件中加入以下代码

                        QT += core gui sql

                        INCLUDEPATH += "D:/mysql-9.2.0-winx64/include"

                        LIBS += -L"D:/mysql-9.2.0-winx64/lib" -llibmysql  

                        连接数据库

                            // 添加 MySQL 数据库驱动

                            QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

                            // 设置数据库连接参数

                            db.setHostName("localhost");  // 数据库服务器地址

                            db.setDatabaseName("studentManagerSystem"); // 数据库名称(连接指定数据库)

                            db.setPort(3306);             // 设置端口号(默认是3306)

                            db.setUserName("root");       // 数据库用户名

                            db.setPassword("12345678");     // 数据库密码

                            // 打开数据库连接

                            if (!db.open())

                            {

                                qDebug() size())); ui->showInfo->append(("插入数据信息:")); ui->showInfo->append(QString("学号:%1").arg(num)); ui->showInfo->append(QString("姓名:%1").arg(name)); ui->showInfo->append(QString("年龄:%1").arg(age)); ui->showInfo->append(QString("性别:%1").arg(sex)); }

                        删除数据

                        根据学号查询到指定数据并删除,若未找到该学生信息则删除数据失败

                        Qt从入门到入土(十一) -数据库操作--MySQL

                        Qt从入门到入土(十一) -数据库操作--MySQL 

                        void Widget::delData()
                        {
                            if(ui->id_edit->text().isEmpty())
                            {
                                ui->showInfo->clear();
                                ui->showInfo->append("删除数据失败!请先输入需要删除的学生的学号!");
                                return;
                            }
                            ui->showInfo->clear();
                            int num = ui->id_edit->text().trimmed().toInt();
                            // 检查是否存在匹配的学生数据
                            if (!query->prepare("SELECT * FROM students WHERE num = :num"))
                            {
                                ui->showInfo->append("查询学生数据的准备注入语句失败!");
                                qDebug()bindValue(":num", num);
                            if (!query->exec())
                            {
                                ui->showInfo->append("查询学生数据失败!");
                                qDebug()next())
                            {
                                ui->showInfo->append("删除数据失败!未找到该学生!");
                                return;
                            }
                            // 执行删除学生信息操作
                            if(!query->prepare(QString("DELETE FROM students WHERE num=%1").arg(num)))
                            {
                                ui->showInfo->append("删除学生数据的准备注入语句失败!");
                                qDebug()showInfo->append("删除学生数据失败!");
                                qDebug()append("删除数据成功!");
                        }
                        

                        修改数据

                        根据学号查询到指定数据并修改,若未找到该学生信息则修改数据失败

                        Qt从入门到入土(十一) -数据库操作--MySQL

                        Qt从入门到入土(十一) -数据库操作--MySQL

                         

                        void Widget::modData()
                        {
                            if(ui->id_edit->text().isEmpty() || ui->name_edit->text().isEmpty() ||
                                ui->age_edit->text().isEmpty() || ui->sex_edit->text().isEmpty())
                            {
                                ui->showInfo->clear();
                                ui->showInfo->append("修改数据失败!请先输入新的学生信息!学生学号不能改变!");
                                return;
                            }
                            ui->showInfo->clear();
                            // trimmed函数的作用是去除首尾空格
                            int num = ui->id_edit->text().trimmed().toInt();
                            QString name = ui->name_edit->text().trimmed();
                            int age = ui->age_edit->text().trimmed().toInt();
                            QString sex = ui->sex_edit->text().trimmed();
                            // 检查是否存在匹配的学生数据
                            if (!query->prepare("SELECT * FROM students WHERE num = :num"))
                            {
                                ui->showInfo->append("查询学生数据的准备注入语句失败!");
                                qDebug()bindValue(":num", num);
                            if (!query->exec())
                            {
                                ui->showInfo->append("查询学生数据失败!");
                                qDebug()next())
                            {
                                ui->showInfo->append("修改数据失败!未找到该学生!");
                                return;
                            }
                            // 执行更新操作
                            if(!query->prepare(QString("UPDATE students SET name = :name , age = :age , sex = :sex WHERE num = :num")
                                                    .arg(name).arg(age).arg(sex).arg(num)))
                            {
                                ui->showInfo->append("修改学生数据的准备注入语句失败!");
                                qDebug()bindValue(":age", age);
                            query->bindValue(":sex", sex);
                            query->bindValue(":num", num);
                            if(!query->exec())
                            {
                                ui->showInfo->append("修改学生数据失败!");
                                qDebug()append("修改数据成功!");
                            ui->showInfo->append(("修改后的数据信息为:"));
                            ui->showInfo->append(QString("学号:%1").arg(num));
                            ui->showInfo->append(QString("姓名:%1").arg(name));
                            ui->showInfo->append(QString("年龄:%1").arg(age));
                            ui->showInfo->append(QString("性别:%1").arg(sex));
                        }
                        

                        查询数据

                        根据学号查询

                        Qt从入门到入土(十一) -数据库操作--MySQL

                         Qt从入门到入土(十一) -数据库操作--MySQL

                        void Widget::serData()
                        {
                            if(ui->id_edit->text().isEmpty())
                            {
                                ui->showInfo->clear();
                                ui->showInfo->append("查询数据失败!请先输入需要查询的学生的学号!");
                                return;
                            }
                            ui->showInfo->clear();
                            int num = ui->id_edit->text().trimmed().toInt();
                            if(!query->prepare(QString("SELECT * FROM students WHERE num=%1").arg(num)))
                            {
                                ui->showInfo->append("查询学生数据的准备注入语句失败!");
                                qDebug()showInfo->append("查询数据失败!未找到该学生!");
                                qDebug()next())
                            {
                                QSqlRecord rec = query->record();
                                ui->showInfo->append("查询数据成功!");
                                ui->showInfo->append("查询数据结果为:");
                                ui->showInfo->append(QString("学号:")+QString::number(rec.value("num").toInt()));
                                ui->showInfo->append(QString("姓名:")+rec.value("name").toString());
                                ui->showInfo->append(QString("年龄:")+QString::number(rec.value("age").toInt()));
                                ui->showInfo->append(QString("性别:")+rec.value("sex").toString());
                            }
                            else
                            {
                                ui->showInfo->append("查询数据失败!未找到该学生!");
                            }
                        }
                        

                        连接数据库

                        void Widget::connectDatabase()
                        {
                            database = QSqlDatabase::addDatabase("QMYSQL");
                            database.setHostName("localhost");   // 设置主机名
                            database.setDatabaseName("studentManagerSystem");
                            database.setPort(3306);   // 设置端口号
                            database.setUserName("root");
                            database.setPassword("12345678");
                            if(!database.open())
                            {
                                ui->showInfo->append(QString("MySQL数据库打开失败!\n")+database.lastError().text());
                                return;
                            }
                            ui->showInfo->clear();
                            ui->showInfo->append("MySQL数据库连接成功!");
                            // 连接数据库后可以输入信息
                            ui->id_edit->setReadOnly(false);
                            ui->name_edit->setReadOnly(false);
                            ui->age_edit->setReadOnly(false);
                            ui->sex_edit->setReadOnly(false);
                            query = new QSqlQuery(database);
                        }
                        

                        断开数据库

                        void Widget::disconnectDatabase()
                        {
                            if(database.isOpen())
                            {
                                database.close();
                                ui->showInfo->clear();
                                ui->showInfo->append("MySQL数据库成功断开!");
                                // 禁止输入信息
                                ui->id_edit->setReadOnly(true);
                                ui->name_edit->setReadOnly(true);
                                ui->age_edit->setReadOnly(true);
                                ui->sex_edit->setReadOnly(true);
                            }
                            else
                            {
                                ui->showInfo->clear();
                                ui->showInfo->append("MySQL数据库暂未连接!");
                            }
                        }

                        综合代码

                        main.cpp

                        #include "widget.h"
                        #include 
                        #include 
                        #include 
                        #include 
                        #include 
                        int main(int argc, char *argv[])
                        {
                            QApplication a(argc, argv);
                            Widget w;
                            w.show();
                            return a.exec();
                        }
                        

                        widget.h

                        #ifndef WIDGET_H
                        #define WIDGET_H
                        #include 
                        #include 
                        #include 
                        #include 
                        #include 
                        QT_BEGIN_NAMESPACE
                        namespace Ui {
                        class Widget;
                        }
                        QT_END_NAMESPACE
                        class Widget : public QWidget
                        {
                            Q_OBJECT
                        public:
                            Widget(QWidget *parent = nullptr);
                            ~Widget();
                        private:
                            void initUI();
                            void connectDatabase();  // 连接数据库
                            void disconnectDatabase();  // 断开数据库
                            void addData();    // 增加数据
                            void delData();   // 删除数据
                            void serData();   // 查询数据
                            void modData();   // 修改数据
                            void showDriver();  // 显示驱动信息
                        private:
                            Ui::Widget *ui;
                            QSqlDatabase database;
                            QSqlQuery* query;
                            QSqlError error;
                            QSqlRecord record;
                        };
                        #endif // WIDGET_H
                        

                        widget.cpp

                        #include "widget.h"
                        #include "./ui_widget.h"
                        #include 
                        #include 
                        Widget::Widget(QWidget *parent)
                            : QWidget(parent)
                            , ui(new Ui::Widget)
                        {
                            ui->setupUi(this);
                            this->setWindowTitle("学生管理系统");
                            // 未连接数据库不能输入信息
                            ui->id_edit->setReadOnly(true);
                            ui->name_edit->setReadOnly(true);
                            ui->age_edit->setReadOnly(true);
                            ui->sex_edit->setReadOnly(true);
                            QFile file(":/Resources/style.css");
                            if(file.open(QIODevice::ReadOnly))
                            {
                                this->setStyleSheet(file.readAll());
                            }
                            initUI();
                        }
                        Widget::~Widget()
                        {
                            delete ui;
                        }
                        void Widget::initUI()
                        {
                            showDriver();
                            // 连接数据库
                            connect(ui->connect_btn,&QPushButton::clicked,this,&Widget::connectDatabase);
                            // 断开数据库连接
                            connect(ui->disconnect_btn,&QPushButton::clicked,this,&Widget::disconnectDatabase);
                            // 增加数据
                            connect(ui->add_btn,&QPushButton::clicked,this,&Widget::addData);
                            // 删除数据
                            connect(ui->del_btn,&QPushButton::clicked,this,&Widget::delData);
                            // 修改数据
                            connect(ui->modify_btn,&QPushButton::clicked,this,&Widget::modData);
                            // 查询数据
                            connect(ui->search_btn,&QPushButton::clicked,this,&Widget::serData);
                        }
                        void Widget::connectDatabase()
                        {
                            database = QSqlDatabase::addDatabase("QMYSQL");
                            database.setHostName("localhost");   // 设置主机名
                            database.setDatabaseName("studentManagerSystem");
                            database.setPort(3306);   // 设置端口号
                            database.setUserName("root");
                            database.setPassword("12345678");
                            if(!database.open())
                            {
                                ui->showInfo->append(QString("MySQL数据库打开失败!\n")+database.lastError().text());
                                return;
                            }
                            ui->showInfo->clear();
                            ui->showInfo->append("MySQL数据库连接成功!");
                            // 连接数据库后可以输入信息
                            ui->id_edit->setReadOnly(false);
                            ui->name_edit->setReadOnly(false);
                            ui->age_edit->setReadOnly(false);
                            ui->sex_edit->setReadOnly(false);
                            query = new QSqlQuery(database);
                        }
                        void Widget::disconnectDatabase()
                        {
                            if(database.isOpen())
                            {
                                database.close();
                                ui->showInfo->clear();
                                ui->showInfo->append("MySQL数据库成功断开!");
                                // 禁止输入信息
                                ui->id_edit->setReadOnly(true);
                                ui->name_edit->setReadOnly(true);
                                ui->age_edit->setReadOnly(true);
                                ui->sex_edit->setReadOnly(true);
                            }
                            else
                            {
                                ui->showInfo->clear();
                                ui->showInfo->append("MySQL数据库暂未连接!");
                            }
                        }
                        void Widget::addData()
                        {
                            if(ui->id_edit->text().isEmpty() || ui->name_edit->text().isEmpty() ||
                                ui->age_edit->text().isEmpty() || ui->sex_edit->text().isEmpty())
                            {
                                ui->showInfo->clear();
                                ui->showInfo->append("增加数据失败!请先输入信息!");
                                return;
                            }
                            ui->showInfo->clear();
                            // trimmed函数的作用是去除首尾空格
                            int num = ui->id_edit->text().trimmed().toInt();
                            QString name = ui->name_edit->text().trimmed();
                            int age = ui->age_edit->text().trimmed().toInt();
                            QString sex = ui->sex_edit->text().trimmed();
                            // 检查是否存在匹配的学生数据
                            if (!query->prepare("SELECT * FROM students WHERE num = :num"))
                            {
                                ui->showInfo->append("查询学生数据的准备注入语句失败!");
                                qDebug()bindValue(":num", num);
                            if (!query->exec())
                            {
                                ui->showInfo->append("查询学生数据失败!");
                                qDebug()next())
                            {
                                ui->showInfo->append("增加数据失败!该学生已存在!");
                                return;
                            }
                            // 执行增加学生数据信息的操作
                            if(!query->prepare(QString("INSERT INTO students(num,name,age,sex) VALUES('%1','%2','%3','%4')").arg(num).arg(name).arg(age).arg(sex)))
                            {
                                ui->showInfo->append("增加学生数据的准备注入语句失败!");
                                qDebug()showInfo->append("增加学生数据失败!");
                                qDebug()append("增加数据成功!");
                            ui->showInfo->append("插入数据数量:"+QString::number(query->size()));
                            ui->showInfo->append(("插入数据信息:"));
                            ui->showInfo->append(QString("学号:%1").arg(num));
                            ui->showInfo->append(QString("姓名:%1").arg(name));
                            ui->showInfo->append(QString("年龄:%1").arg(age));
                            ui->showInfo->append(QString("性别:%1").arg(sex));
                        }
                        void Widget::delData()
                        {
                            if(ui->id_edit->text().isEmpty())
                            {
                                ui->showInfo->clear();
                                ui->showInfo->append("删除数据失败!请先输入需要删除的学生的学号!");
                                return;
                            }
                            ui->showInfo->clear();
                            int num = ui->id_edit->text().trimmed().toInt();
                            // 检查是否存在匹配的学生数据
                            if (!query->prepare("SELECT * FROM students WHERE num = :num"))
                            {
                                ui->showInfo->append("查询学生数据的准备注入语句失败!");
                                qDebug()bindValue(":num", num);
                            if (!query->exec())
                            {
                                ui->showInfo->append("查询学生数据失败!");
                                qDebug()next())
                            {
                                ui->showInfo->append("删除数据失败!未找到该学生!");
                                return;
                            }
                            // 执行删除学生信息操作
                            if(!query->prepare(QString("DELETE FROM students WHERE num=%1").arg(num)))
                            {
                                ui->showInfo->append("删除学生数据的准备注入语句失败!");
                                qDebug()showInfo->append("删除学生数据失败!");
                                qDebug()append("删除数据成功!");
                        }
                        void Widget::serData()
                        {
                            if(ui->id_edit->text().isEmpty())
                            {
                                ui->showInfo->clear();
                                ui->showInfo->append("查询数据失败!请先输入需要查询的学生的学号!");
                                return;
                            }
                            ui->showInfo->clear();
                            int num = ui->id_edit->text().trimmed().toInt();
                            if(!query->prepare(QString("SELECT * FROM students WHERE num=%1").arg(num)))
                            {
                                ui->showInfo->append("查询学生数据的准备注入语句失败!");
                                qDebug()showInfo->append("查询数据失败!未找到该学生!");
                                qDebug()next())
                            {
                                QSqlRecord rec = query->record();
                                ui->showInfo->append("查询数据成功!");
                                ui->showInfo->append("查询数据结果为:");
                                ui->showInfo->append(QString("学号:")+QString::number(rec.value("num").toInt()));
                                ui->showInfo->append(QString("姓名:")+rec.value("name").toString());
                                ui->showInfo->append(QString("年龄:")+QString::number(rec.value("age").toInt()));
                                ui->showInfo->append(QString("性别:")+rec.value("sex").toString());
                            }
                            else
                            {
                                ui->showInfo->append("查询数据失败!未找到该学生!");
                            }
                        }
                        void Widget::modData()
                        {
                            if(ui->id_edit->text().isEmpty() || ui->name_edit->text().isEmpty() ||
                                ui->age_edit->text().isEmpty() || ui->sex_edit->text().isEmpty())
                            {
                                ui->showInfo->clear();
                                ui->showInfo->append("修改数据失败!请先输入新的学生信息!学生学号不能改变!");
                                return;
                            }
                            ui->showInfo->clear();
                            // trimmed函数的作用是去除首尾空格
                            int num = ui->id_edit->text().trimmed().toInt();
                            QString name = ui->name_edit->text().trimmed();
                            int age = ui->age_edit->text().trimmed().toInt();
                            QString sex = ui->sex_edit->text().trimmed();
                            // 检查是否存在匹配的学生数据
                            if (!query->prepare("SELECT * FROM students WHERE num = :num"))
                            {
                                ui->showInfo->append("查询学生数据的准备注入语句失败!");
                                qDebug()bindValue(":num", num);
                            if (!query->exec())
                            {
                                ui->showInfo->append("查询学生数据失败!");
                                qDebug()next())
                            {
                                ui->showInfo->append("修改数据失败!未找到该学生!");
                                return;
                            }
                            // 执行更新操作
                            if(!query->prepare(QString("UPDATE students SET name = :name , age = :age , sex = :sex WHERE num = :num")
                                                    .arg(name).arg(age).arg(sex).arg(num)))
                            {
                                ui->showInfo->append("修改学生数据的准备注入语句失败!");
                                qDebug()bindValue(":age", age);
                            query->bindValue(":sex", sex);
                            query->bindValue(":num", num);
                            if(!query->exec())
                            {
                                ui->showInfo->append("修改学生数据失败!");
                                qDebug()append("修改数据成功!");
                            ui->showInfo->append(("修改后的数据信息为:"));
                            ui->showInfo->append(QString("学号:%1").arg(num));
                            ui->showInfo->append(QString("姓名:%1").arg(name));
                            ui->showInfo->append(QString("年龄:%1").arg(age));
                            ui->showInfo->append(QString("性别:%1").arg(sex));
                        }
                        void Widget::showDriver()
                        {
                            auto list = database.drivers();
                            // 显示驱动信息
                            ui->showInfo->append("当前Qt支持的驱动有:");
                            for(size_t i = 0;ishowInfo->append(list[i]);
                            }
                        }
                        
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码