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

补充知识点:

相关推荐
Hacker_LaoYi37 分钟前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀39 分钟前
Redis梳理
数据库·redis·缓存
独行soc40 分钟前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天1 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
唐诺1 小时前
几种广泛使用的 C++ 编译器
c++·编译器
工业甲酰苯胺1 小时前
分布式系统架构:服务容错
数据库·架构
南宫生2 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__2 小时前
Web APIs学习 (操作DOM BOM)
学习
mahuifa2 小时前
混合开发环境---使用编程AI辅助开发Qt
人工智能·vscode·qt·qtcreator·编程ai
冷眼看人间恩怨2 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget