Qt连接mysql数据库
QT和Mysql版本
Qt:5.14.2
Mysql:mysql-8.0.11-winx64
编译器:msvc2017_64
检查是否有驱动
\qt\Qt5.14.2\5.14.2\msvc2017_64\plugins\sqldrivers
源码编译qmysql.dll文件
1.下载源码(路径不要有中文!)
源码下载
2.编译
找到5.14.2\qt-everywhere-src5.14.2\qtbase\src\plugins\sqldrivers\mysql,打开工程mysql.pro编译,会有两个报错:
Cannot read H:/qtsqldrivers-config.pri: No such file or directory
Project ERROR: Library ‘mysql’ is not defined.
3.解决报错
(1)Cannot read H:/qtsqldrivers-config.pri: No such file or directory
解决:打开qsqldriverbase.pri文件,将第四行注释掉,即#include($
s
h
a
d
o
w
e
d
(
shadowed(
shadowed( $PWD)/qtsqldrivers-config.pri),然后添加include(./configure.pri),保存,完成。
(2)Project ERROR: Library ‘mysql’ is not defined.
解决:mysql.pro将第六行注释掉,这样:#QMAKE_USE += mysql
4.修改mysql.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
#!!mysql的lib路径
LIBS += D:\mysql\mysql/lib/libmysql.lib
#!!mysql的include路径
INCLUDEPATH += $$quote(D:\mysql\mysql/include)
#!!mysql的include路径
DEPENDPATH += $$quote(D:\mysql\mysql/include)
include(../qsqldriverbase.pri)
#!!设置编译好的qmysql.dll放置的目录
DESTDIR = ../mysql/mysqlDll
5.注意
mysql路径一定不能有空格,我是安装到Program Files下的,重新复制了一份到其他地方,才可以生成!
6.复制dll到qt编译器
(1)将生成的两个dll放到Qt\Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers
(2)将mysql/lib内的动态库文件libmysql.dll复制到Qt\Qt5.14.2\5.14.2\mingw73_64\bin
QT连接数据库
(1)新建QT项目
(2)在pro中添加QT += sql
(3)在头文件添加引用
(4)写代码
void MainWindow::on_pushButton_clicked()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("hax_dzdc");
db.setUserName("root");
db.setPassword("123456");
if (!db.open()) {
qDebug("Sql connect failed.");
qDebug() << db.lastError().text();
QMessageBox::warning(nullptr, "警告", "无法连接数据库");
}
else
{
qDebug("Sql connected.");
QSqlQuery result = db.exec("select * from dzzhdc");
for(int i=0; i<result.size(); i++)
{
result.next();
qDebug() << result.value("id").toString() << '\t' << result.value("name").toString() << '\t'
<< result.value("type").toString() << endl;
}
}
}
(5)编译运行,成功
【参考网址】
[1]: https://blog.csdn.net/weixin_39912368/article/details/113116866
[2]: https://blog.csdn.net/qq_41603808/article/details/126139960