环境:
mysql-8.0.11-winx64
qtcreator5.14.2
mingw73_64
示例代码
void MainWindow::sqltest() {
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("hello"); //这里输入你的数据库名
db.setUserName("root");
db.setPort(3306);
db.setPassword("123"); //这里输入你的密码
if (db.open()) {
qDebug() << "open ok !!!";
}
db.close();
exit(-1);
}
错误
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
首先
他里面是没有MySQL选项(如果有,直接看下面),需要自己编译或者去官网下载套MySQL驱动
编译:
a.进入qtcreator安装路径/版本号\Src\qtbase\src\plugins\sqldrivers\mysql
b.用qtcreator打开mysql.pro
c.修改mysql.pro
配置文件
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql 注释掉这行,不然会提示mysql not define
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
#下面这句是附加mysql头文件、动态库、动态库输出路径的配置项
INCLUDEPATH += E:/mysql-8.0.11-winx64/include/
LIBS += E:/mysql-8.0.11-winx64/lib/libmysql.lib
DESTDIR = ../mysql/mysqlDllmsvc
d.修改qsqldriverbase.pri
配置文件
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
e.点击锤子让它生成编译器可以用的MySQL驱动
小插曲:
msvc-version.conf loaded but QMAKE_MSC_VER isn't set
解决方法:
在qtcreator安装路径\版本号\msvc2017_64\mkspecs\common\msvc-version.conf文件前面添加QMAKE_MSC_VER = 1900
,这是叫你指定一下msvc版本号,不要超过msvc-version.conf最高的数字就行。
mingw的驱动一览
msvc驱动一览
f.将编译出来的MySQL驱动复制到qtcreator安装路径\版本号\编译器类型\plugins\sqldrivers\
路径下
mingw的驱动一览
msvc的驱动一览
QSqlDatabase: QMYSQL driver not loaded
这部分是在QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
里面有MySQL
选项时出现
解决方案:
复制MySQL安装路径/lib/下的libmysqld.dll、libmysqld.lib、libmysql.dll、libmysql.lib
到qtcreator安装路径\版本号\编译器类型\bin\
路径下
别急,高版本MySQL是没有的,只复制llibmysql.dll、libmysql.lib
或许可以,虽然我这里一直失败,没用
我是直接从MySQL5.7.x版本里扣出来的libmysqld.dll、libmysqld.lib、libmysql.dll、libmysql.lib
塞进去用的,还别说,真的能用