首页 > 数据库 >Qt连接MySQL数据库失败

Qt连接MySQL数据库失败

时间:2024-01-15 19:45:18浏览次数:20  
标签:Qt 数据库 MySQL dev dll Program pawf mysql

连接MySQL数据库时报错:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

有上述报错是因为使用的qt版本不自带mysql的驱动,需要手动编译。可以检查一下D:\pawf\Program\dev\cpp\Qt\5.15.2\mingw81_64\plugins\sqldrivers目录中是否有mysql的驱动文件,如下图所示:

注意:不同版本的MySQL里面包含不同的libmysql.dll,不同的libmysql.dll必须和配套的qsqlmysqld.dll(debug版)或qsqlmysql.dll(release版)一起才能正常工作!

进入到D:\pawf\Program\dev\cpp\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql目录中,使用qtcreator打开mysql.pro文件。

进行下列修改:

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

# QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

//该路径是MySQL的头文件路径
INCLUDEPATH += "D:\pawf\Program\dev\MySQL\MySQL Server 8.0\include"
//这是MySQL的库文件路径
LIBS += "D:\pawf\Program\dev\MySQL\MySQL Server 8.0\lib/libmysql.lib"
//为了方便查找,不妨增加一条语句,该语句用来指明编译后的结果输出的位置
DESTDIR  = ../mysql/lib/

QT  = core core-private sql-private

# For QMAKE_USE in the parent projects.
# include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)

PLUGIN_TYPE = sqldrivers
load(qt_plugin)

DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

构建后在编译的输出信息中会显示生成的驱动文件的路径:

qsqlmysql.dllqsqlmysql.dll.debug复制到D:\pawf\Program\dev\cpp\Qt\5.15.2\mingw81_64\plugins\sqldrivers目录中即可。

注意:需要将MySQL的D:\pawf\Program\dev\MySQL\MySQL Server 8.0\lib目录中的libmysql.dll添加到可执行文件的目录中,如果出现类似于没有加载mysql驱动但是又能够找到mysql的驱动这种错误,就说明缺少这个文件。当然,不添加也行,可以通过设置环境变量的方法来使可执行文件能够找到该文件,但是在打包的时候是不会自动添加这个文件的,所以一定不要忘记手动添加该文件到程序目录中

按照上述内容去做的话,使用qtcreator进行开发应该就没问题了,但是在使用clion进行开发时还是会有问题,会出现类似于mysql驱动未加载,没有可用驱动这种报错。我在不断尝试中找到了一个解决方法:

先将Release构建生成的程序使用windeployqt进行打包。

可以发现会有sqldrivers这么一个目录,里面是程序需要用到的一些数据库驱动,将这个目录和libmysql.dll文件添加到可执行程序所在的目录中,即可正确连接数据库。至于具体的原因,我还不太了解,但这确实是一个方法,可以在clion中运行程序时正常连接到数据库。

标签:Qt,数据库,MySQL,dev,dll,Program,pawf,mysql
From: https://www.cnblogs.com/pawf/p/17966030

相关文章

  • 我成为开源贡献者的原因竟然是做MySql-CDC数据同步
    今年下半年机缘巧合下公司决定搭建自己的数据中台,中台的建设势必少不了数据集成。首先面临的就是数据集成技术选型的问题,按照社区活跃度、数据源适配性、同步效率等要求对市面上几个成熟度较高的开源引擎进行了深度调研。最终经过内部讨论决定用ApacheSeaTunnel作为数据集成的基......
  • mysql8.0用户与权限管理
    1、用户管理1.1、密码过期策略在MySQL中,数据库管理员可以手动设置账号密码过期,也可以建立一个自动密码过期策略。过期策略可以是全局的,也可以为每个账号设置单独的过期策略。ALTERUSERuserPASSWORDEXPIRE;练习:ALTERUSER'kangshifu'@'localhost'PASSWORDEXPIRE;......
  • 4412 设备树 qt busybox , ctrl+c 无法终止 程序
    问题: 在系统中,ctrl+c无法终止程序。背景: 软件:迅为网盘设备树镜像。硬件:迅为4412板卡。  网上的截图:   我自己的改动如下;     结果显示: ......
  • MySQL面试题(1):count
    InnoDB和MyISAM的count(*)有何不同MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数(无where条件)InnoDB执行count(*)的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数为什么InnoDB不跟MyISAM一样,也把数字存起来呢?因为......
  • mysql分区表
    1.什么是分区?​所谓的分区就是将一个表分解成多个区块进行操作和保存,从而降低每次操作的数据,提高性能,而对应用来说是透明的,从逻辑上看就只是一个表(这里跟分库分表的访问不一样),但是物理上的这个表可能是由多个物理分区组成,每个分区都是一个独立的对象,可以进行独立处理。2.分区目......
  • 达梦数据库7_第 3 章 数据定义语句_3.6 管理表
    3.6管理表 3.6管理表3.6.1基表定义语句用户数据库建立后,就可以定义基表来保存用户数据的结构。达梦数据库中基表可以分为两类,分别为数据库表和外部表,数据库表由数据库管理系统自行组织管理,而外部表在数据库的外部组织,是操作系统文件。手册中如无明确说明基表均指数据库表......
  • 达梦数据库7_第 3 章 数据定义语句_3.5 管理 HTS 表空间
    3.5管理HTS表空间 创建HUGE表之前,必须要先创建一个HUGE表空间(HTS)。如果不创建,只能使用系统HUGE表空间HMAIN。3.5.1创建HTS表空间语法格式CREATEHUGETABLESPACE<表空间名>PATH<表空间路径>;参数1.<表空间名>表空间的名称,表空间名称最大长度128字节;2......
  • 达梦数据库7_第 3 章 数据定义语句_3.4 管理表空间
    3.4管理表空间3.4.1表空间定义语句创建表空间。语法格式CREATETABLESPACE<表空间名><数据文件子句>[<数据页缓冲池子句>][<存储加密子句>]<数据文件子句>::=DATAFILE<文件说明项>{,<文件说明项>}<文件说明项>::=<文件路径>[MIRROR<文件路径>]SIZE<文件大小>......
  • MySQL中SQL语句的执行流程
    比如有一条SQL语句select*fromtableswherename='zhangsan';那么这条语句通过MySQL查询,执行流程是怎么样的?直接看图:1.客户端跟服务端建立连接,权限校验2.检查是否开启缓存QueryCache,并且是否命中缓存,如果命中,直接将数据返回给客户端;没有命中则向后继续执行3.检查SQ......
  • 常用的MySQL备份/还原 的方法
    mysql备份数据库mysql备份单个数据库#mysql备份某个库格式:mysqldump-h主机名-P端口-u用户名-p"密码"--database数据库名>文件名.sql#实例:mysql备份某个库:mysqldump-h10.*.*.9-P3306-uroot-p"密码"--single-transaction--master-data=2--set-gtid-purged=OF......