一、原因:
相应的文件里没有mysql驱动
可以用 qDebug() << "支持的数据库"<<QSqlDatabase::drivers()<<"end";//打印qt支持的数据库类型,提示里面没有QMYSQL,只有QSQLITE、QODBC等
二、解决方法:
1、配置QT5.12.2里面的mysql.pro文件并生成最新驱动
首先打开你的安装目录,我安装在D盘
所以文件在:D:\Qt\5.12.2\Src\qtbase\src\plugins\sqldrivers\mysql
进去后先开始编译一次。
会提示有一个错误,不用管它,
进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
win32:LIBS += -LD:/MYSQL/mysql-5.7.23-winx64/lib/ -llibmysql
INCLUDEPATH += D:/MYSQL/mysql-5.7.23-winx64/include
DEPENDPATH += D:/MYSQL/mysql-5.7.23-winx64/include
include(../qsqldriverbase.pri)
配置完之后
在这里配置一下编译器,选择64位的。
配置完编译器之后开始根据红色剪头进行一下操作:
1—>2;构建一下项目
1—>3;然后qmake一下。
这样就有编译的驱动出来了。
2、拷贝驱动和动态库到指定目录
拷贝最新驱动到指定的目录:
去到编译出来的驱动目录路劲复制qsqlmysql.dll,qsqlmysqld.dll到指定的路劲中。(我的目录是在D盘中,如果按照我的流程来也是在D盘的)
复制到:
3、编写连接数据库代码
加入相关头文件
xxx.pro文件中:
widget.h中
然后在widget.cpp中:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
qDebug()<<db.drivers();
db.setHostName("localhost");//数据库地址
db.setDatabaseName("mysql");//现有的数据库名称
db.setPort(3306);//数据库端口
db.setUserName("root");//用户名
db.setPassword("123456");//密码
if (!db.isValid())
{
QMessageBox::critical(0, QObject::tr("Database"),db.lastError().text());
}
if(!db.open())
{
qDebug()<<"不能连接"<<"connect to mysql error";
qDebug()<<db.lastError().text();
return ;
}
else
{
qDebug()<<"连接成功"<<"connect to mysql OK";
}
代码分析:
db.setDatabaseName(“mysql”);//现有的数据库名称,该开始这一块输入有错,一直连接失败请注意。如下图所示,通过Navicat可以查看存在的数据库,也可以新建后再连接。
db.setPort(3306);//数据库端口
db.setUserName(“root”);//用户名
db.setPassword(“123456”);//密码
这几句的意思就是连接你在安装MySql时所建立的数据库,就是已有的数据库和用户。而不是数据库在这里创建,用户也不是在这里创建,这个是要注意的。
测试结果: