1.环境:
MySQL:8.0(C:\Program Files\MySQL\MySQL Server 8.0,64位)、VS2017(社区版,D:\Microsoft Visual Studio\2017)、Qt5.14.2,使用MSVC64位(D:\Qt\Qt5.14.2\5.14.2\msvc2017_64)
2. 编译驱动
可以查看这篇博文:
Qt 编译MySQL数据库驱动——MSVC版本https://blog.csdn.net/LclLsh/article/details/122305347
如果连接数据库(下面这条语句后面加个断点)
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
依旧出现“QSqlDatabase: QMYSQL driver not loaded”,请看下面的步骤。
3. 解决依赖问题
上面这种情况部分人说软件版本32位、64位的问题,我不予置评。经过大量查看博文、经验贴、论坛,结合自己的尝试,发现一种方法,也许不适合你,但你值得尝试一下。
使用Dependencies软件查看 libmysql.dll 这个动态库的依赖项是否完整。
从下图可以看到,出现问号感叹号的就是缺少的依赖项,这个缺少的情况根据每个人的电脑情况而异。我这个是处于缺少依赖的情况,虽然磁盘中有,但是路径问题或是其他问题导致无法识别。
根据Dependencies的检测情况,发现依赖项都位于C:\Windows\System32目录下,使用Everything查找缺少的依赖,将缺少的依赖从MySQL的安装目录下(bin或lib目录)找到,复制到C:\Windows\System32。
再次运行程序,发现没有“QSqlDatabase: QMYSQL driver not loaded”这个问题了。
win7及以前的的系统可以使用链接:Dependency Walker,不过很久没有更新了。win10使用会无响应,因此建议使用
链接:Dependencies,这是开源的、基于Dependency Walker写的。希望看源码、自己编译的,可以下载源代码。下面的位置是下载应用程序。
下载解压后,运行DependenciesGui.exe。使用方法很简单,直接拖文件进去或者打开一个dll文件。具体使用方法可以看看其他博文,有的博文提供百度网盘链接。
Everything链接:Everything
4. 测试连接
相应的头文件这里就不展示了,代码如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost"); // 数据库服务器IP,我用的是本地电脑
db.setDatabaseName("test");// 数据库名,需要提前在数据库中建立对应的数据库
db.setUserName("root");// 用户名
db.setPassword("123456");// 密码
db.setPort(3306);// 端口号
if (db.open())
qDebug() << "success";
else
qDebug() << "fail";
需要特别注意:有些新手忘了在数据库中建立数据库,直接使用别人的代码,这会导致怎么都连不上。很多人在发经验贴的时候,也会下意识的忽略数据库中的设置。