1. 前言
- QT提供了一个与平台无关和数据库无关的访问SQL数据库的接口,QT SQL模块使用数据库驱动插件和不同的数据库接口进行通信。
- 本文使用QT5.14.2,在QT的安装目录下能找到一些sql驱动文件,这些文件是QT实现无关数据库无关平台接口的关键,通过调用这里的驱动,实现与不同的数据库通信而代码只需指定数据库类型。因此想要和MySQL数据库通信就要添加MySQL的驱动插件进来。
2. 安装MySQL
- 下载MySQL:https://dev.mysql.com/downloads/mysql/
- 安装教程:https://blog.csdn.net/INT_TANG/article/details/125117483
3. 拷贝MySQL的安装库文件到QT目录中
4. 编译出qsqlmysql.dll
驱动插件
- 需要利用QT的源码进行编译,所以QT在安装的时候需要选择source,如果之前没有安装source,也可以利用QT安装目录下的
MaintenanceTool
工具安装添加source,安装好之后在QT目录下可以找到Src文件夹,里面就是Qt源码。
- 然后我们找到QT源码下mysql所在的目录
..\QT\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql
- 将整个安装后的MySQL server目录复制到该QT工程下,以防止编译时出现错误。
- 使用QtCreator打开并修改mysql.pro文件。
- 编译前先清除一下工程,防止出现编译失败
- 编译完成后找到QT安装的根目录,找到以下文件
- 将编译好的驱动插件复制到QT的SQL驱动插件文件夹中。
5. 打印出支持的驱动
#include <QtCore/QCoreApplication>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlError>
#include <QString>
#include <qsqldatabase.h>
#include <qdebug.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << QSqlDatabase::drivers();
return a.exec();
}
6. 连接MySQL数据库
- 在安装好MySQL后,使用命令行新建一张数据表。
#include <QtCore/QCoreApplication>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlError>
#include <QString>
#include <qsqldatabase.h>
#include <qdebug.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //建立一个数据库,类型为MySQL
//使用登录验证,安装MySQL时需要注意使用传统方式验证
db.setHostName("localhost");
db.setPort(3306);
db.setUserName("root");
db.setPassword("*******"); //填写自己的密码
db.setDatabaseName("usertest");//数据库名
if (db.open()) //打开数据库
qDebug() << "create ok!";
else
qDebug() << db.lastError().text();
qDebug() << QSqlDatabase::drivers();
return a.exec();
}
7. 注意事项
- 建议安装MySQL Server和QT source,然后使用安装的文件,在QT的源码中编译出SQL驱动插件,目的是为了保持版本一致,因为我们是在自己的编译平台编译代码,因此该驱动跟我们编译环境息息相关(试过将复制的文件编译后,也能打印出支持的驱动插件,但出现不能加载的错误),可能复制的其他编译的dll出现兼容问题,因此最好在自己的平台编译出驱动插件,避免出现其他问题。
- MySQL服务需要开启。
- 本文使用msvc2019 X64编译器。