墨香年少 32 发布于 2022年5月7日 在做一个Qt的项目的时候,需要本地存储一些数据,本来第一选择是sqlite的,但是我读取的时候,发现同样的sql,Qt读取的结果和navicat读取的结果不一样。 也没找到为什么不一样,研究再三没有找到原因,于是放弃了sqlite,转而使用mysql 结果提示我:“QSqlDatabase: QMYSQL driver not loaded” 首先打印出来支持的数据模块: qDebug() << QSqlDatabase::drivers(); 结果中并没有mysql,于是百度和谷歌都去搜索了下,谷歌还专门用英文去搜索了下,发现大部分的网站抄来抄去的解决方案是复制mysql下的dll到qt的对应的目录下, 我试了下,没有任何作用,错误提示依旧 于是再找,终于找到了一个网页的方案,并且测试成功了。 解决方案如下。 首先,Qt安装的时候需要选中源码,这样才会再Qt的目录下有src目录。我的Qt在D盘下面,所以我的src目录是: D:\QT5\5.15.2\Src 打开下面这个目录: D:\QT5\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql 类似如下: 双击:mysql.pro,Qt会自动打开这个项目。 编辑pro文件,编辑后的代码如下: TARGET = qsqlmysql HEADERS += $$PWD/qsql_mysql_p.h SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp #QMAKE_USE += mysql OTHER_FILES += mysql.json PLUGIN_CLASS_NAME = QMYSQLDriverPlugin include(../qsqldriverbase.pri) # mysql安装目录下的include文件夹 INCLUDEPATH += "D:/MySQL/55/include" # mysql安装目录下的lib文件夹下的libmysql.lib文件 LIBS += "D:/MySQL/55/lib/libmysql.lib" # 编译后的dll存放的位置 DESTDIR = "D:\QT5\5.15.2\MysqlDll" 然后编辑,然后去D:\QT5\5.15.2\MysqlDll看下 结果如下: 复制这个文件夹下所有的文件到: D:\QT5\5.15.2\msvc2019\plugins\sqldrivers 我用的是msvc2019_32 所以拷贝到这个目录,如果你说64位,可能需要复制到:msvc2019_64,mingw的话就复制到:mingw81_32或者mingw81_64 重启Qt后,就没问题了。 下面是我的单例DB #pragma execution_character_set("utf-8") #include "db.h" #include <QCoreApplication> #include <QMutex> #include <QDebug> #include <QMessageBox> Db::Db(QObject *parent) : QObject(parent) { qDebug() << QSqlDatabase::drivers(); db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("127.0.0.1"); db.setUserName("root"); db.setPassword("123456"); db.setDatabaseName("disk"); if (!db.open()) { QString err = "Error: Failed to connect database."; QMessageBox msgBox; msgBox.setText(err); msgBox.exec(); } } Db *Db::Instance() { static QMutex mutex; static QScopedPointer<Db> inst; if (Q_UNLIKELY(!inst)) { mutex.lock(); if (!inst) { inst.reset(new Db); } mutex.unlock(); } return inst.data(); } bool Db::isOpen() { if (!db.open())//判断数据库是否打开 { qDebug() << "db open faild! err:" << db.lastError(); return false; } qDebug() << "数据库打开成功"; return true; } void Db::query(QString sql) { QSqlQuery sql_query; sql_query.exec(sql); } 最后输出如下: ("QSQLITE", "QMARIADB", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7") 数据库打开成功 -- 结束 -- 目之所及,皆是回忆,心之所想,皆是过往 分享这篇帖子 链接帖子 分享到其他站点
墨香年少 32 发布于 2022年5月7日 主要原因还是数据库的dll版本不对造成的,参考网址: https://blog.csdn.net/Lvcxiao/article/details/118631612 http://www.cppblog.com/jack-wang/archive/2021/10/15/217833.html 目之所及,皆是回忆,心之所想,皆是过往 分享这篇帖子 链接帖子 分享到其他站点
墨香年少 32 发布于 2022年5月27日 如果:QSqlDatabase::drivers() 结果里面有QMYSQL,但是依然提示:“QSqlDatabase: QMYSQL driver not loaded” 将你的MySQL的安装目录的lib文件夹下的libmysql.dll拷贝到你的Qt安装目录下的bin目录下 然后重启Qt 目之所及,皆是回忆,心之所想,皆是过往 分享这篇帖子 链接帖子 分享到其他站点