Qt5.15 连接MySQL数据库
Qt5.15 的QSqlDatabase 类中并没有支持MySQL数据库的驱动,需要用户自己添加。
这就需要重新编译下mysql.pro
测试环境:
QT版本:QT 5.15.0
MySQL版本:mysql 5.5.55
连接
重新编译mysql.pro。
1、打开Qt自带的mysql.pro
文件地址在Qt的安装目录下: “C:\Qt\5.15.0\Src\qtbase\src\plugins\sqldrivers\mysql”
2、修改mysql.pro
// 注释该语句
#QMAKE_USE += mysql
//添加
include(C:\Qt\5.15.0\Src\qtbase\src\plugins\sqldrivers\configure.pri)
//继续添加
LIBS += "D:\Program Files\MySQL\MySQL Server 5.5\lib\ libmysql.lib"
INCLUDEPATH +="D:\Program Files\MySQL\MySQL Server 5.5\include"
DEPENDPATH += D:\Program Files\MySQL\MySQL Server 5.5\include
mysql.pro 修改后如下:
include(C:\Qt\5.15.0\Src\qtbase\src\plugins\sqldrivers\configure.pri)
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
LIBS += "D:\Program Files\MySQL\MySQL Server 5.5\lib\ libmysql.lib"
INCLUDEPATH +="D:\Program Files\MySQL\MySQL Server 5.5\include"
DEPENDPATH += D:\Program Files\MySQL\MySQL Server 5.5\include
include(../qsqldriverbase.pri)
3、构建或者运行
这时会报错,
忽略此问题。
在计算机C盘下会产生如下的几个文件
然后,将libqsqlmysql.a 、qsqlmysql.dll 复制到 C:\Qt\5.15.0\mingw81_64\bin 下
测试
编写测试用例
1、新建widget项目
2、 在.pro 文件中添加
QT += sql
3、 修改main.cpp
#include <QApplication>
#include <QMessageBox>
#include <QSqlError>
#include <QTextCodec>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
bool creatConnect();
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//QTextCodec *codec = QTextCodec::codecForName("UTF-8");
//QTextCodec::setCodecForLocale(codec);
if(!creatConnect())
{
// return 1;
}
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "\t "<< driver;
qDebug() << "End";
QSqlQuery query;
QString sql = "select * from test1;";
qDebug() << sql;
query.exec(sql);
while(query.next())
{
qDebug()<<query.value(0).toString()<<query.value(1).toString();
}
return a.exec();
}
bool creatConnect()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3307);
db.setDatabaseName("test22");
db.setUserName("root");
db.setPassword("123456");
bool ok = db.open();//建立数据库连接
if(!ok)
{
QMessageBox::critical(0,QObject::tr("连接数据库失败!!!"),db.lastError().text());
return false;
}
else
{
QMessageBox::information(0,QObject::tr("Tips"),QObject::tr("连接数据库成功!!!"));
return true;
}
}
注意:这里的数据库连接的项目中与MySQL安装过程中的配置要一致,如端口号,数据库名称、登录账号及密码。
4、运行
测试成功,会弹出对话框:
可以看到,MySql的驱动也已经添加。
总结:
- 1、本人在调试过程中曾出现,MySQL驱动以添加,但是数据库还是连不上的情况,最后还是重新卸载MySQL,然后重装MySQL后
才连接成功。 - 2、网上也有介绍将MySQL安装目录lib 文件夹下的文件 libmysql.dll 复制到 Qt的bin
目录下,本人亲测未能有效。我也对照过MySQL5.5.55 的版本,是64位的。Qt 的编译是MInGW_64,可以确定不是版本问题 - 3、本人也曾从MySQL官网上下载https://dev.mysql.com/downloads/connector/c/
下载mysql-connector-c,但是在其lib目录中并没有找到文件“libmysql.dll”。