QT中如何使用MYSQL_qt 如何内置mysql-程序员宅基地

技术标签: QT  qt  mysql  

摘要:QT中使用Mysql数据库,实现增删查改的功能


一、如何通过QT连接到Mysql数据库?

本次编译器版本为5.12.3 MinGW 32 bit ,此版下QT已经将自带的mysql驱动取消了。

1.查看自己的QT是否自带mysql驱动

代码如下(示例):

qDebug()<<QSqlDatabase::drivers();

运行程序可以在程序输出找到(“QSQLITE”, “QMYSQL”, “QMYSQL3”, “QODBC”, “QODBC3”, “QPSQL”, “QPSQL7”);若自己的程序输出找不到"QMYSQL",那么就需要自己手动添加mysql的驱动给QT。

2.添加mysql驱动给QT

添加mysql驱动给QT有两种方法:

(1)复制mysql的文件给QT

将mysql安装文件的lib目录下的libmysql.dll和libmysqld.dll复制到Qt5.12.3(自己的QT版本)中的mingw493_32的bin文件下。

!!!要注意编译器的位数和mysql的位数相对应,若你的编译器使用的64位,那就从64位的mysql安装目录中找libmysql.dll和libmysqld.dll,位数不对应依然会报错。

!!!驱动文件很容易搜到,没必要的话不需要去下载数据库,或者下载免安装版的mysql,找到库文件即可。

(2)通过重新编译QT源代码

安装QT时要勾选Source才可以,本人在QT5.14.0使用此方法进行编译测试时,编译后只有64位能正常使用mysql,最后只能将问题算在此版的bug上,由于我通过此方式实现的结果不理想,所以本次就不介绍此方法的实现了。想探索的朋友可以去搜一下相关文章。

二、数据库的操作

本人将数据库的操作进行了封装,方便以后的使用,sust_sql是我自己封装的类。

1.连接数据库

奉上连接代码:

/********************************************
 * 函数名称:connectmysql(QString Host,int port,QString Dname,QString Uname,QString Pass)
 * 功能:连接到mysql数据库
 * 工作方式:
 * 参数:
 *      参数1:QString类型   数据库的IP地址
 *      参数2:int类型       端口号、
 *      参数3:QString类型   数据库名
 *      参数4:QString类型   用户名
 *      参数5:QString类型   数据库密码
 * 返回值:连接成功返回true,失败返回false
 * 备注:
 * 修改记录
*********************************************/
bool sust_sql::connectmysql(QString Host,int port,QString Dname,QString Uname,QString Pass)
{
    

    qDebug()<<QSqlDatabase::drivers();
    QSqlDatabase My_DB = QSqlDatabase::addDatabase("QMYSQL");
    My_DB.setHostName(Host);
    My_DB.setPort(port);
    My_DB.setDatabaseName(Dname);
    My_DB.setUserName(Uname);
    My_DB.setPassword(Pass);
    bool ok = My_DB.open();
    
    if(ok){
    
      qDebug()<< "连接成功";
      return true;
    }
    else {
    
      qDebug()<< "连接失败";
      return false;
    }
}

2.增加数据到数据库

奉上增加数据代码:

/********************************************
 * 函数名称:Write_mysql(int a,QString str1,QString str2,QString str3)
 * 功能:将数据写入到数据库
 * 工作方式:
 * 参数:
 *     参数1:id号
 *     参数2:学生姓名
 *     参数3:学生性别
 *     参数4:学生学号
 * 返回值:连接成功返回true,失败返回fasle
 * 备注:
 * 修改记录
*********************************************/

bool sust_sql::Write_mysql(int a,QString str1,QString str2,QString str3)
{
    
    QSqlQuery My_Query;
    QString insert_db = QString("insert into SUST_DB values('%4','%1','%2','%3')")
            .arg(a).arg(str1).arg(str2).arg(str3);          //SUST_DB是数据库的表名
   // My_Query.exec(insert_db);

    if(My_Query.exec(insert_db))
    {
    
        return true;
    }
    else {
    
        return false;
    }


}

3.从数据库删除数据

根据姓名删除数据
奉上删除数据代码:

/********************************************
 * 函数名称:Delete_mysql(QString name)
 * 功能:将数据写入到数据库
 * 工作方式:
 * 参数:
 *     参数1:学生姓名
 * 返回值:删除成功返回true,失败返回fasle
 * 备注:
 * 修改记录
*********************************************/

bool sust_sql::Write_mysql(QString name)
{
    
    QSqlQuery My_Query;
    QString insert_db = QString("delete from SUST_DB where name = '%1'").arg(name)         //SUST_DB是数据库的表名
   // My_Query.exec(insert_db);

    if(My_Query.exec(insert_db))
    {
    
        return true;
    }
    else {
    
        return false;
    }

}

4.从数据库中查找

本次只写了根据姓名查找的方法,可以通过重载的方式或者重写函数进行多功能查找
奉上查找代码:

/********************************************
 * 函数名称:Find_mysql(QString find)
 * 功能:在数据库中查找数据
 * 工作方式:
 * 参数:
 *     QString 类型  根据姓名查找
 * 返回值:连接成功返回true,失败返回fasle
 * 备注:
 * 修改记录
*********************************************/
void sust_sql::Find_mysql(QString find)
{
    
    QString name;
    QString sex;
    QString stu_number;

    QString str = QString("select *from SUST_DB where name = '%1'").arg(find);
    QSqlQuery query;
    query.exec(str);
    
    while(query.next())     //遍历数据库查找数据
    {
    
        name = query.value(1).toString();
        sex = query.value(2).toString();
        stu_number = query.value(3).toString();

        qDebug() << name;
        qDebug() << sex;
        qDebug() << stu_number;

    }
}

总结

QT中使用数据库相对简单,刚接触QT使用Mysql时,主要就是配置好mysql驱动的问题,在使用QT进行数据库操作时,熟悉数据库的操作语句基本上就不会有什么问题了。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44894312/article/details/108192553

智能推荐

【连接池】-从源码到适配(上),你遇到过数据库连接池的问题吗?This connection has been closed_failed to initialize pool: this connection has bee-程序员宅基地

文章浏览阅读1.2k次,点赞19次,收藏22次。本文从项目需求出发到项目最终发版提测,讲述一下项目中遇到的问题(MyBatis数据库厂商适配、查看数据库链接、连接池失效等)以及打怪升级过程(思路),文章中会提到涉及到的坑以及解决办法。相信看完,多少会给你提供一些价值。_failed to initialize pool: this connection has been closed.

android listpreference 自定义,自定义android preference组件-程序员宅基地

文章浏览阅读179次。e() {return mDisableDependentsState;}public void setDisableDependentsState(boolean disableDependentsState) {mDisableDependentsState = disableDependentsState;}@Overrideprotected Object onGetDefaultValu..._android 自定义listpreference

射频MOS管和三极管优缺点对比_mos管比起三极管有什么优势-程序员宅基地

文章浏览阅读5.1k次。MOS管优点:1.具有良好的温度特性。2.具有良好的噪声特性。3.输入阻抗高。4.MOS管的漏极电流具有二次函数特性,三极管的集电极电流是指数形式。5.MOS管的上限频率远远超过三极管的上限工作频率。6.MOS管功耗较小。MOS管缺点:1.增益通常较低。2.输入阻抗高,导致匹配网络难设计。3.相对于三极管,MOS管的功率容量偏低..._mos管比起三极管有什么优势

华为云云耀云服务器L实例评测使用_华为云耀云服务器l实例跟腾讯云什么服务器类似-程序员宅基地

文章浏览阅读172次。其次就是会发送一条开通后的短信到手机上,这点还可以吧,不过也没太大必要,感觉要是第一次进这个服务器管理界面的话,有个服务器信息弹窗选择是新手还是老手,新手提示教程,老手提示服务器基础信息会更好一点,一般人买服务器都是在电脑上,感觉手机短信的不那么有必要。以下是进入后的界面,感觉还行吧,就是都是统一的黑色,没感觉到重点,熟悉后,应该会好一些,但是什么重置密码,设置网关什么的不好找到,需要详细的找一下,这点不太好。还有一次创建失败的信息,也不知道因为什么,在后边价格联系客服之类的应该会更好一点。_华为云耀云服务器l实例跟腾讯云什么服务器类似

在安装win7系统时如何不产生100M的系统保留分区_做系统的保留分区只有50mb-程序员宅基地

文章浏览阅读855次。在安装win7系统时如何不产生100M的系统保留分区 如果你是从xp系统升级安装,或者重新安装win7系统,应该不会出现所谓的100M系统保留分区情况。 这里说的安装指的的对新的磁盘或者删除了老的所有分区后的安装win7系统。 第一种方法:利用第三方分区工具先对磁盘进行分区。没有第三方工具,利用xp安装盘,进行磁盘分区也行。只要分区格式化就可以了,没有必要安装xp系统_做系统的保留分区只有50mb

大厂程序员都爱用的六款IDE工具,你都知道吗?_ide软件-程序员宅基地

文章浏览阅读2k次。给大家推荐六款好用的IDE工具,快来看看吧!_ide软件

随便推点

用Visual Studio建立第一个ASP.NET页面_vs2022怎么创建aspx文件-程序员宅基地

文章浏览阅读2.6w次,点赞17次,收藏84次。1.新建一个项目 (1)直接在VS开始界面上选择“新建项目 (2)在菜单上选择“文件”、“新建”、“项目”2.在弹出的窗口中选择“Visual C#”--->“Web”---->"ASP.NET空Web应用程序",注意选择的是.NET Framework4框架,然后输入你所想输入的项目名称,点击“确定”,就成功新建了一个ASP.NET项目_vs2022怎么创建aspx文件

快速上手MATLAB:科研、工程、数据分析,MATLAB入门(下)教你基础知识!分享《MATLAB初学者教程 MATLAB编程-菜鸟入门(清晰版)》_菜鸟教程matlab在线编程-程序员宅基地

文章浏览阅读1.2k次,点赞38次,收藏49次。前两天,我们在(MATLAB入门(上))中简单认识了MATLAB,了解了MATLAB的基础知识,今天继续从文件读取、MATLAB绘图两个方面给大家介绍。MATLAB是一款广泛应用的科学计算工具,适用于科研、工程、数据分析等领域。认识MATLAB需要了解其概述及特点,学会使用命令窗口、创建M文件、目录和文件管理、搜索路径管理等基本操作。MATLAB基础知识包括简单计算、基本运算符号、数值、变量及表达式、数组的生成和寻访。编程基础则包括流程控制、控制命令、逻辑数组和向量化等。_菜鸟教程matlab在线编程

问题:( )存量经营派单中,实现一个派单聚合多种业务的活动是哪类?( ) #微信#微信-程序员宅基地

文章浏览阅读307次,点赞9次,收藏6次。问题:( )存量经营派单中,实现一个派单聚合多种业务的活动是哪类?

《嵌入式系统原理与接口技术》第2章 嵌入式系统工程设计概述_嵌入式系统设计中有哪些矛盾需要设计者和开发者共同解决?-程序员宅基地

文章浏览阅读3.8k次。由于Live writer排版差异,文中编号始终从1开始,对于文章内容欢迎通过评论或者邮件[email protected]与我交流。1.1 嵌入式系统设计的基本流程不知各位读者是否记得在小学学过的一篇课文,说的是统筹方法,课文中举了泡茶喝这个例子。比方,想泡壶茶喝。当_嵌入式系统设计中有哪些矛盾需要设计者和开发者共同解决?

链表--有序链表的合并C语言实现-程序员宅基地

文章浏览阅读167次。合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。

显卡驱动 1080Ti Linux,Ubuntu18.04 Nvidia1080ti环境安装显卡驱动-程序员宅基地

文章浏览阅读483次。安装了1080ti显卡的电脑安装Ubuntu16.04和17.04都有烦人的黑屏问题,应该是内置显卡驱动不稳定导致的问题。安装刚新出的Ubuntu18.04尝试一下,很好很顺畅,没什么问题,系统直接安装成功,接着安装官方的显卡驱动。1、重启进入BIOS,将secure boot取消(设为disabled),再重启2、用命令lsmod | grep nouveau如果有东西输出,就要去关闭自带的No..._ubuntu18.04 1080ti 驱动