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

补充知识点:

相关推荐
工业甲酰苯胺5 分钟前
Redis性能优化的18招
数据库·redis·性能优化
‘’林花谢了春红‘’41 分钟前
C++ list (链表)容器
c++·链表·list
没书读了1 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
----云烟----1 小时前
QT中QString类的各种使用
开发语言·qt
i道i2 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
小怪兽ysl2 小时前
【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
数据库·postgresql
wqq_9922502772 小时前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
爱上口袋的天空2 小时前
09 - Clickhouse的SQL操作
数据库·sql·clickhouse
机器视觉知识推荐、就业指导2 小时前
C++设计模式:建造者模式(Builder) 房屋建造案例
c++
朝九晚五ฺ3 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习