Qt 学习第十五天:连接mysql数据库进行增删查改操作

我发现了有些人喜欢静静看博客不聊天呐,

但是ta会"点赞"。

这样的人呢帅气低调有内涵,

美丽大方很优雅。

说的就是你,

不用再怀疑哦

🚥qt一开始是没有mysql驱动的,需要自己手动安装

应用程序输出打印的qt驱动列表:QList("QSQLITE", "QODBC", "QPSQL") 里面未包含"QMYSQL"

视频链接:【qt怎么连接mysql(qt连接不上mysql)】

博客链接:关于qt 各个版本连接不上数据库mysql的问题_qt连接不上数据库的原因-CSDN博客

一、创建Qt Console Application

为什么不创建widget,因为我们只是对数据库进行增删查改操作,当然你想用之前学过的qt组件显示内容也可以用

而Qt Console Application只是输出方式只有打印,正如它的名字一样,项目栏显示只有两个文件

二、调用a.quit()函数退出程序,否则会一直处于运行状态

关于exec()的说明

三、检查当前kit套件的数据库驱动

3.1 如何添加和更换套件

添加套件,点击左侧项目

这里可以更换套件

// 检查kit套件的数据库驱动:

qDebug() << "数据库驱动:" << QSqlDatabase::drivers();

🍔没有mysql就要安装驱动,或者使用其他数据库(只是sql语句可能会不同,其他都是一样)

四、添加mysql数据库并打开

cpp 复制代码
    
    // 添加数据库                                不能小写!
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    // 
    db.setHostName("127.0.0.1"); // 主机IP
    db.setUserName("root"); // 用户名
    db.setPassword(""); // 密码
    db.setDatabaseName("bankdb"); // 要连接哪个数据库,它的名字
    // 打开数据库,如果打不开就弹出报错对话框
    if(db.open() == false)
    {
        qDebug() << "WARNING:" <<  db.lastError().text() << "\n";
    }
    // 打开成功
    qDebug() << "数据库成功打开" << "\n";

五、增删查改

增

cpp 复制代码
    // 插入数据
    QSqlQuery insertQuery;
    // insertQuery.prepare("INSERT INTO accounts (ID, money) VALUES (:id, :money)");
    // insertQuery.bindValue(":id", 3); // 假设要插入的ID为3
    // insertQuery.bindValue(":money", 1000); // 假设要插入的money为1000

    if(insertQuery.exec("INSERT INTO account(ID, money) VALUES (3, 4000)"))
    {
        qDebug() << "Insert successful";
    }
    else
    {
        qDebug() << "Insert failed:" << insertQuery.lastError().text();
    }

运行结果

删

cpp 复制代码
// 删除数据
    QSqlQuery deleteQuery;
    // deleteQuery.prepare("DELETE FROM accounts WHERE ID = :id");
    //deleteQuery.bindValue(":id", 2); // 假设要删除的ID为2

    if(deleteQuery.exec("DELETE FROM account WHERE ID = 2"))
    {
        qDebug() << "Delete successful";
    }
    else
    {
        qDebug() << "Delete failed:" << deleteQuery.lastError().text();
    }

运行结果

改

cpp 复制代码
// 更新数据
    QSqlQuery updateQuery;
    // updateQuery.prepare("UPDATE account SET money = :money WHERE ID = :id");
    // updateQuery.bindValue(":id", 3); // 假设要更新的ID为2
    // updateQuery.bindValue(":money", 6666); // 假设新的money值为2000

    if(updateQuery.exec("UPDATE account SET money = 1234 WHERE ID = 3"))
    //if(query.exec("UPDATE account SET money = 6 WHERE ID = 3"))
    {
        qDebug() << "Update successful";
    }
    else
    {
        qDebug() << "Update failed:" << query.lastError().text();
    }

运行结果

查

cpp 复制代码
    // 增删查改都可以用QSqlQuery
    QSqlQuery query;

    // 执行查询
    if(query.exec("select money from account where ID = 2"))
    {
        if(query.next())
        {
            int money = query.value(0).toInt();
            qDebug() << "Money:" << money;
        }
        else
        {
            qDebug() << "No record found with ID 2";
        }
    }
    else
    {
        qDebug() << "查询失败:" << query.lastError().text();
    }

运行结果

完整代码

pro文件需要加:QT = core sql

cpp 复制代码
#include <QCoreApplication>
//#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // Set up code that uses the Qt event loop here.
    // Call a.quit() or a.exit() to quit the application.
    // A not very useful example would be including
    // #include <QTimer>
    // near the top of the file and calling
    // QTimer::singleShot(5000, &a, &QCoreApplication::quit);
    // which quits the application after 5 seconds.

    // If you do not need a running Qt event loop, remove the call
    // to a.exec() or use the Non-Qt Plain C++ Application template.

    // 检查kit套件的数据库驱动:
    qDebug() << "数据库驱动:" <<  QSqlDatabase::drivers();
    // 添加数据库                                不能小写!
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    //
    db.setHostName("127.0.0.1"); // 主机IP
    db.setUserName("root"); // 用户名
    db.setPassword(""); // 密码
    db.setDatabaseName("bankdb"); // 要连接哪个数据库,它的名字
    // 打开数据库,如果打不开就弹出报错对话框
    if(db.open() == false)
    {
        qDebug() << "WARNING:" <<  db.lastError().text() << "\n";
    }
    // 打开成功
    qDebug() << "数据库成功打开" << "\n";

    // 增删查改都可以用QSqlQuery
    QSqlQuery query;
/*
    // 执行查询
    if(query.exec("select money from account where ID = 2"))
    {
        if(query.next())
        {
            int money = query.value(0).toInt();
            qDebug() << "Money:" << money;
        }
        else
        {
            qDebug() << "No record found with ID 2";
        }
    }
    else
    {
        qDebug() << "查询失败:" << query.lastError().text();
    }
*/
    // 插入数据
    QSqlQuery insertQuery;
    // insertQuery.prepare("INSERT INTO accounts (ID, money) VALUES (:id, :money)");
    // insertQuery.bindValue(":id", 3); // 假设要插入的ID为3
    // insertQuery.bindValue(":money", 1000); // 假设要插入的money为1000

    if(insertQuery.exec("INSERT INTO account(ID, money) VALUES (3, 4000)"))
    {
        qDebug() << "Insert successful";
    }
    else
    {
        qDebug() << "Insert failed:" << insertQuery.lastError().text();
    }

    // 删除数据
    QSqlQuery deleteQuery;
    // deleteQuery.prepare("DELETE FROM accounts WHERE ID = :id");
    //deleteQuery.bindValue(":id", 2); // 假设要删除的ID为2

    if(deleteQuery.exec("DELETE FROM account WHERE ID = 2"))
    {
        qDebug() << "Delete successful";
    }
    else
    {
        qDebug() << "Delete failed:" << deleteQuery.lastError().text();
    }

    // 更新数据
    QSqlQuery updateQuery;
    // updateQuery.prepare("UPDATE account SET money = :money WHERE ID = :id");
    // updateQuery.bindValue(":id", 3); // 假设要更新的ID为2
    // updateQuery.bindValue(":money", 6666); // 假设新的money值为2000

    if(updateQuery.exec("UPDATE account SET money = 1234 WHERE ID = 3"))
    {
        qDebug() << "Update successful";
    }
    else
    {
        qDebug() << "Update failed:" << query.lastError().text();
    }

    a.quit();
    //return a.exec();
}

补充知识点:

相关推荐
wo_jack8 小时前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
Lucifer三思而后行8 小时前
最近折腾了一下金仓数据库的备份恢复
数据库·备份恢复
青少儿编程课堂9 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园连连看解析
c++·python·算法·bfs·信息学竞赛
草莓熊Lotso9 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
进击的荆棘10 小时前
MySQL——库的操作
数据库·mysql
晓梦林10 小时前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习
2601_9679801111 小时前
“小程序·云开发”上线 助力开发者的高效利器
数据库·存储管理·小程序云开发·云函数·开发者工具
zhangjw3411 小时前
1-9 SELECT 查询基础:where、group by、having、order by、limit offset
数据库·postgresql·pg数据库
计算机毕设定制辅导-无忧学长11 小时前
《基于Spring Boot的迷游哈游戏综合服务平台的开发》
java·vue.js·spring boot·mysql·迷游哈游戏综合服务平台
唐老板11 小时前
Postgres 慢查询,先取证再动手
数据库·ai编程