在Qt里面连接MySQL数据库出现一连串问题,下面一一说明。
操作系统:Win7
在Qt里面连接MySQL数据库:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName(":memory:");
if (!db.open())
{
QMessageBox::critical(0, "Cannot open database", "Unable to establish a connection", QMessageBox::Cancel);
return false;
}
没有成功。后台输出:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
按照网上的教程,写了下面的代码,在创建连接之前调用:
#include <QPluginLoader>
void loadMySqlDriver()
{
QPluginLoader loader;
// MySQL 驱动插件的路径
loader.setFileName("C:\\Qt\\Qt5.6.3\\5.6.3\\msvc2013_64\\plugins\\sqldrivers\\qsqlmysqld.dll");
qDebug() << loader.load();
qDebug() << loader.errorString();
}
此函数输出的是:
false
“Cannot load library C:\Qt\Qt5.6.3\5.6.3\msvc2013_64\plugins\sqldrivers\qsqlmysqld.dll: %1 不是有效的 Win32 应用程序。”
看了一下,自己安装的MySQL是64bit的,于是重新安装了一个32bit的MySQL(5.5版本)。
结果还是不行。。。发现自己的Qt也是64bit的(Qt 5.6.3 MSVC2013 64bit)。于是又装了32bit的Qt(Qt 5.8.0 MSVC2013 32bit)。
loadMySqlDriver()
中的dll文件路径也做相应修改。现在,loadMySqlDriver()
输出的是:
false
“Cannot load library C:\Qt\Qt5.8.0\5.8\msvc2013\plugins\sqldrivers\qsqlmysqld.dll: 找不到指定的模块。”
解决办法:把C:\Program Files (x86)\MySQL\MySQL Server 5.5\lib
中的libmysql.dll
复制到C:\Qt\Qt5.8.0\5.8\msvc2013\bin
中。
现在,加载没有问题了,loadMySqlDriver()
输出:
true
“Unknown error”
但连接还是open不开。。。我是照书上写的db.setDatabaseName(":memory:");
这句话意思是使用在内存中建立的数据库,程序运行结束就销毁。仔细一看,书上用的是QSQLITE
,应该是QMYSQL
不支持内存中创建数据库。
我将它改成自己建立的一个数据库db.setDatabaseName("students");
结果终于连接上了!