一、原因:

相应的文件里没有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

W3school mysql w3school MySQL在线编辑器无法运行_sql

进去后先开始编译一次。

W3school mysql w3school MySQL在线编辑器无法运行_mysql_02


会提示有一个错误,不用管它,

进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)

W3school mysql w3school MySQL在线编辑器无法运行_mysql_03


配置完之后

在这里配置一下编译器,选择64位的。

W3school mysql w3school MySQL在线编辑器无法运行_W3school mysql_04

配置完编译器之后开始根据红色剪头进行一下操作:

W3school mysql w3school MySQL在线编辑器无法运行_数据库_05


1—>2;构建一下项目

1—>3;然后qmake一下。

这样就有编译的驱动出来了。

2、拷贝驱动和动态库到指定目录

拷贝最新驱动到指定的目录:

去到编译出来的驱动目录路劲复制qsqlmysql.dll,qsqlmysqld.dll到指定的路劲中。(我的目录是在D盘中,如果按照我的流程来也是在D盘的)

W3school mysql w3school MySQL在线编辑器无法运行_c++_06


复制到:

W3school mysql w3school MySQL在线编辑器无法运行_数据库_07

 

 

3、编写连接数据库代码

加入相关头文件

xxx.pro文件中:

W3school mysql w3school MySQL在线编辑器无法运行_c++_08


widget.h中

W3school mysql w3school MySQL在线编辑器无法运行_数据库_09


然后在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时所建立的数据库,就是已有的数据库和用户。而不是数据库在这里创建,用户也不是在这里创建,这个是要注意的。

W3school mysql w3school MySQL在线编辑器无法运行_sql_10

测试结果:

W3school mysql w3school MySQL在线编辑器无法运行_数据库_11