目录
环境:Windows11+Qt6.2.4(C++)+MySQL8.0
问题概述
我用Qt写完一个简单的关于mysql数据库操作的程序后,在本机上运行没有出现任何问题,然而发给其他某个未拥有Qt环境的主机时,启动程序却出现Driver not loaded Driver not loaded。
问题详情
源程序中在连接数据库时做以下处理:
if (!db.open())
{
QString errorText = db.lastError().text();
ui->text->appendPlainText(errorText);
}
会在ui的text文本框中打印Driver not loaded Driver not loaded;
然后想起来Qt6默认不包含mysql的动态库文件和驱动,之前的文件是自己重新配置编译过的;
检查打包程序中是否含有驱动文件,发现存在./sqldrivers/qsqlmysql.dll文件:
修改代码判断数据库驱动是否可用,甚至直接打印所有支持的数据库驱动:
if (!QSqlDatabase::isDriverAvailable("QMYSQL"))
{
ui->text->appendPlainText("The QMYSQL driver is not available.");
}
else
{
ui->text->appendPlainText("The QMYSQL driver is available.");
}
QStringList list = QSqlDatabase::drivers();//检查包含的数据库驱动
ui->text->appendPlainText("可用数据库驱动:");
for(QString temp : list)
{
ui->text->appendPlainText(temp);
}
显示QMYSQL存在并可用(如果显示不存在QMYSQL可以去把qsqlmysql.dll文件复制过来重试)
最后判断是否能正确链接到MySQL动态库文件:
直接把MySQL中libmysql.dll拷贝过来,放到exe文件同级目录下,重启检查:
(默认地址为MySQL下的MySQL Server 8.0\lib\libmysql.dll)
OK!显示连接成功
解决方案
当在未含有Qt环境的主机上运行含有MySQL数据库相关操作的Qt程序时,在每次打包程序时手动复制动态库文件libmysql.dll到exe程序同级目录中,或者可以把MySQL动态库文件libmysql.dll的上级目录lib文件夹添加到系统环境变量里。
//本文供参考和学习之用,仅代表本人个人见解和学习历程中的记录,可能包含个人主观观点和限制,以及可能存在错误和不足之处。读者在阅览本文中的信息和建议时,应自行判断和承担风险。如读者在使用本文中的信息和建议时遇到问题或发现错误,非常希望能告知作者,以帮助作者改正和完善内容。