QT中如何使用MYSQL_Linux__65535的博客-程序员宅基地

技术标签: 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

智能推荐

2018.12.11-21:45-程序员宅基地

马上双十二了,但是没有什么要买的,刚看了新闻,说欧洲地铁和中国地铁对比,中国地铁都是玩手机的,欧洲地铁都是看书的,原来是因为欧洲地铁没有信号,华为进军欧洲市场后,安装了很多基站,所以下在欧洲的很多地铁也都是玩手机的,所以说嘛,很多事情没有亲眼见过,没有亲身经历过的话还是不要过于相信微妙。早点休息吧,阿哲可能今晚要买东西了,双十二嘛,我打算明天白天看看看上的羽绒服有没有降价,北京太冷了吧也!睡觉,g...

AndroidStudio NDK开发及踩得一些坑_jni 文件夹不显示 android studio-程序员宅基地

使用动态注册jni函数:https://blog.csdn.net/wanghao200906/article/details/79153172编译jni文件:https://blog.csdn.net/qq_22494029/article/details/79079918_jni 文件夹不显示 android studio

tensorflow利用for循环进行训练遇到的内存爆炸问题(OOM)_tensorflow oom_alphanoblaker的博客-程序员宅基地

最近在用tensorflow学习模型的知识蒸馏,自己基于cifar10数据集训练得到的teacher模型,在对3种不同参数量的student模型使用相同的alpha和temperature参数进行蒸馏之后,得到的实验结果均与论文结果相反(论文:Distilling the Knowledge in a Neural Network)所以自己打算用循环方式遍历多种alpha,temperature的参数组合来对比蒸馏效果(不想自己手动调参了.jpg,在notebook里一遍遍调完参重新跑然后保存数据真难顶._tensorflow oom

Kubernetes探索学习002--Kubernetes的基本使用-程序员宅基地

Kubernetes 的基本使用方法原则:使用YAML文件描述你要部署的API对象!以部署nginx静态站点为例,具体操作及内容如下1.编写YAML文件[root@kubernetes01 ~]# cat nginx-staticwebsite.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-static..._yeslab kub

基于JAVA实现的迷宫游戏-程序员宅基地

程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。 老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;迷宫的墙足够结实,老鼠不能穿墙而过正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示..._java老鼠迷宫

本地代码如何上传到github-程序员宅基地

…or create a new repository on the command lineecho "# LearningSelf" >> README.mdgit initgit add README.mdgit commit -m "first commit"git remote add origin [email protected]:williamcai663/Le...

随便推点

.cmd文件介绍_.cmd是什么文件-程序员宅基地

.cmd 为连接器命令文件:给出了程序空间和数据空间的设置,及编译后各程序段在程序或数据空间的具体位置。一般情况下该文件主体部分为两个伪指令,MEMORY和SECTIONS。 MEMORY伪指令定义一个目标系统的存储器映像图,用户可以给存储器各部分命名,指定它们的起始地址和长度。SECTIONS伪指令告诉连接器怎样把输入段组合成输出段,以及把输出段放在存储器的什么位置。 ..._.cmd是什么文件

oracle客户端(client)和服务器端…-程序员宅基地

oracle数据库装在服务器端,要登录服务器就需要安装客户端。利用PLSQL连接到数据库,一般需要通过客户端才行。 服务器端不一定在本地(client一定在本地),所以需要在客户端配置TNSNAMES.ORA文件。在文件中添加服务名和IP。 数据库都会有一个全局数据库名例如:orcl,这是在安装数据库时指定的。如果要安装多个数据库,那么这个全局数据库名必须不一样。至于是否后期可以更改,

Word前几页是罗马数字,后面是阿拉伯数字怎么设置_论文页码前两页是罗马后边是数字-程序员宅基地

以前三页是罗马数字为例子 1,在罗马数字页面末尾处插入分节符:将光标定位到罗马数字页面末尾处,单击“页面布局”,单击“分隔符”,单击“分节符”下方的“下一页”选项。 2、在罗马数字节中设置页码格式:将光标定位到罗马数字节,单击“插入”,单击“页码”,单击“设置页码格式”,在“编号格式”右侧选择“Ⅰ,Ⅱ,Ⅲ…”,选中“起始页码”,默认选择Ⅰ,单击“确定”。 3、在阿拉伯数..._论文页码前两页是罗马后边是数字

C#写文本文件,如何换行(添加换行符)-程序员宅基地

把文本写到文件中,如果是几段文字拼合起来输出到文件中,通常每段非结尾文字后需要添加换行符,不然几段文字都变成一段。  在 C# 中,文本换行有两种方法,一种在需要换行的文本后面添加换行符 \r\n 即可,另一种方法用 Environment.NewLine,功能与 \r\n 一样,接着分别看这种两种方法的具体实现代码。  一、C#文本换行之用换行符 \r\n  一个 \r\n 表示换..._c语言怎么在结构体后面加换行符

Jenkins系列(七):创建Jenkins自动化部署任务(将项目运行在Tomcat中)_jenkins配置任务自动启动-程序员宅基地

新建任务新建输入任务名称和任务类型填写任务参数配置Git参数然后在构建中添加shell脚本下面是完整的shell脚本,需要更改的参数有:1、TOMCAT_APP_PATH表示你使用的服务器的Tomcat的安装目录2、pid=ps -ef|grep apache-tomcat-jenkins|grep java|awk '{print $2}'这里表示查找apache-..._jenkins配置任务自动启动

asserts文件存到外部SD卡里-程序员宅基地

package com.example.wang.testapp3;import android.content.res.AssetManager;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import andr..._assent读入到外部