数据库连接错误信息提示:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7

出现这个问题的原因是Qt中没有MySql driver或者是版本有问题导致的,解决的方法是找到Qt源码重新寻找MySql driver的驱动。

解决方案1:从mysql server中复制libmysql.dll到qt对应的安装目录下(bin路径);

解决方案2:从mysql官网上去下载对应的数据库版本。(要根据qt的版本)

注意:QT选用的Windows32位要对应32位的mysql。

注意:QT选用的Windows64位要对应64位的mysql。

例如:

将mysql安装文件的lib目录下的libmysql.dll和libmysqld.dll复制到Qt5.5中的mingw493_32的bin文件下。

链接:https://pan.baidu.com/s/1FBPjWBHvIwDbkIoXAC_MKg 提取码:nki3

这个是32位的mysql安装包

链接:https://pan.baidu.com/s/1AdQk90f_B8W9UjSvb65N_Q

提取码:hdpg

这个是64位的mysql安装包

复制这段内容后打开百度网盘手机App,操作更方便哦

mysql安装步骤:

先解压然后

修改my-default.ini,修改后如图1-2所示

centeros QT连接Mysql数据库 qt连接不上数据库_mysql


文件修改的内容如下:(D:\mysql-5.7.17-winx64改成自己的路径)

[mysql]

#设置mysql客户端默认字符集

default-character-set=utf8

[mysqld]

#设置3306端口

port = 3306

#设置mysql的安装目录

basedir=“D:\mysql-5.7.17-winx64”

#设置mysql数据库的数据的存放目录

datadir=“D:\mysql-5.7.17-winx64\data”

#允许最大连接数

max_cnotallow=200

#服务端使用的字符集默认为8比特编码的latin1字符集

character-set-server=utf8

#创建新表时将使用的默认存储引擎

default-storage-engine=INNODB以管理员身份运行命令提示符,切换到MySQL的bin目录下,输入mysqld install命令(注意是mysqld而不是mysql)回车,即可安装MySQL,如下图所示:

centeros QT连接Mysql数据库 qt连接不上数据库_数据库_02


安装好MySQL后,可以输入net start mysql来启动MySQL,输入net stop mysql 来关闭MySQL服务,也可以在服务里面手动启动/关闭MySQL服务;

安装过程报错和注意事项

我在安装成功后启动MySQL服务时,服务启动不了,提示:MySQL服务无法启动 服务没有报告任何错误 请键入NET HELPMSG 3534 以获得更多帮助,如下:

centeros QT连接Mysql数据库 qt连接不上数据库_mysql_03


解决方案:安装好MySQL后,打开cmd命令窗口,并且进入到MySQL安装目录中的bin目录,然后输入如下命令回车即可:mysqld --initialize-insecure --user=mysql

执行完上面命令后,MySQL会自建一个data文件夹,并且建好默认数据库,登录的用户名为root,密码为空,之后就可以通过命令net start mysql启动mysql服务了。

注:MySQL升级到5.7版本是没有data文件夹的,执行mysqld --initialize-insecure --user=mysql命令会自动新建data文件夹。

qt的pro里面记得加入QT += sql
头文件记得加入

#include <QSqlDatabase>
#include<QSqlQuery>
#include<QSqlError>

关键的数据库连接语句如下:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");//本地名字也可以用(127.0.0.1)
    db.setUserName("root");//数据库用户名
    db.setPassword("123456");//数据库用户密码
    db.setDatabaseName("123");//数据库的名字

这里你要对应你自己的数据库信息。(每个人的数据库都是不一样的)