环境
系统:Win11
Qt版本:5.15.2
MYSQL版本:8.0.35
ODBC版本:8.3.0
构建套件:MinGW64
详情
之前由于重新换了电脑,在Qt中使用数据库的时候发现driver not loaded,困扰了我很久,去网上查了资料,原来是版本没有内置Mysql驱动,需要连接Mysql需要自己去编译。
测试是否有MYSQL驱动
代码如下:
QStringList drivers = QSqlDatabase::drivers();
for(QString d : drivers){
qDebug() << d;
}
如果你的输出窗口有QMYSQL,说明你是有MYSQL驱动的,看一下用户名,密码等等配置是否正确。
如果没有,不要灰心,因为我原来也没有。
我试了很多博主的方法,总结了两种方法成功连接MYSQL数据库
第一种方法
使用ODBC连接
ODBC下载
官网:https://dev.mysql.com/downloads/connector/odbc/
点击后下载后 选择No thanks
ODBC安装
下载完成打开
这样安装就完成了。
ODBC设置
点击添加,找到我们需要的ANSI Driver
点击完成
红色方框部分随便填
蓝色方框部分选择你注册MYSQL的用户名和密码
绿色方框部分填写你创建的数据库名字
填完后点击Test测试一下 ,出现以下图说明成功:
失败可以看看自己的用户名或者密码这些地方是否填写正确,如果不行可以参考第二种方法。
测试ODBC代码
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("你设置的名字");//这里是你在ODBC里面Data Source Name设置的名字!!!
db.setUserName("你的用户名");
db.setPassword("你的密码");
bool ok = db.open();
if(ok){
qDebug() << "success";
}else{
qDebug() << "open failed cause: " << db.lastError().text();
}
运行如果没有问题会出现,就完成了。
注意!
一般安装MYSQL的时候他会自动的给你安装ODBC,可以在先在开始菜单搜索ODBC打开看看有没有我们需要的ANSI Driver
打开后可能没有我们需要的ANSI Driver,就需要去上面提到的官网下载了
第二种方法
第一步-找到目录
找到你Qt安装路径下目录如:
E:\WorkSoftware\QT5.15.2\5.15.2\Src\qtbase\src\plugins\sqldrivers
第二步-修改第一个文件
用Qt Creator打开mysql目录下的 mysql.pro
第三步-修改mysql.pro
在.pro文件中修改,需要的环境为你安装的mysql目录下,可以参考我的去对应
win32:LIBS += -LE:/WorkSoftware/mysql-8.0.35-winx64/lib -llibmysql
INCLUDEPATH += E:/WorkSoftware/mysql-8.0.35-winx64/include
DESTDIR = E:/WorkSoftware/mysql-8.0.35-winx64/include
第四步-修改第二个文件
返回上一级目录,修改qsqldriverbase.pri 文件内容
第五步-修改qsqldriverbase.pri
注释红框中的那行,添加一行新的。点击构建项目!!!不要点运行。
include(./qsqldriverbase.pri)
然后你会看到多了一个文件
点击进去你会看到一个sqldrivers文件夹,再点进去就是我们所需要的依赖了!
将qsqlmysql.dll文件复制到如:
E:\WorkSoftware\QT5.15.2\5.15.2\mingw81_64\plugins\sqldrivers
再将MYSQL的lib目录下 libmysql.dll复制到bin环境目录下
这个时候基本上就没问题了!
打开Qt去测试一下
在你的.pro文件中添加sql
第六步-测试MYSQL代码
去构造函数中测试一下。
参考代码如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("你的数据库名字");//这里是你在MYSQL中建立的数据库名称
db.setUserName("你的用户名");
db.setPassword("你的密码");
bool ok = db.open();
if(ok){
qDebug() << "success";
}else{
qDebug() << "open failed cause: " << db.lastError().text();
}