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

补充知识点:

相关推荐
Young_202202026 分钟前
学习笔记——KMP
笔记·学习
希忘auto8 分钟前
详解MySQL安装
java·mysql
娅娅梨10 分钟前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++
兵哥工控15 分钟前
MFC工控项目实例二十九主对话框调用子对话框设定参数值
c++·mfc
运维佬15 分钟前
在 MySQL 8.0 中,SSL 解密失败,在使用 SSL 加密连接时出现了问题
mysql·adb·ssl
Leo.yuan20 分钟前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi
我爱工作&工作love我22 分钟前
1435:【例题3】曲线 一本通 代替三分
c++·算法
行然梦实22 分钟前
学习日记_20241110_聚类方法(K-Means)
学习·kmeans·聚类
马船长28 分钟前
制作图片木马
学习
Runing_WoNiu29 分钟前
MySQL与Oracle对比及区别
数据库·mysql·oracle