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

补充知识点:

相关推荐
Qter_Sean10 分钟前
自己动手写Qt Creator插件
开发语言·qt
xiaoyaolangwj12 分钟前
高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质
学习·机器人·自动驾驶
何曾参静谧14 分钟前
「QT」文件类 之 QIODevice 输入输出设备类
开发语言·qt
PGCCC16 分钟前
【PGCCC】Postgresql 存储设计
数据库·postgresql
静止了所有花开1 小时前
SpringMVC学习笔记(二)
笔记·学习
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
L_cl3 小时前
Python学习从0到1 day26 第三阶段 Spark ④ 数据输出
学习
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
Mephisto.java4 小时前
【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
大数据·学习·hbase