Qt6 连接 MySql数据库
前言
教程参考:
http://t.csdnimg.cn/wKAk3
Qt6 是没有mysql驱动是要自己安装的,而且在 Qt6 是没有.pro文件,只能用cmake进行编译,特别的坑。
我也是被坑惨了,还去傻乎乎地找.por文件,整了半天。
必看
这个教程是针对Qt6的,如果用的是Qt5,则不适用!
在连接前要先安装Mysql,可以参考
http://t.csdnimg.cn/zRlUe
正文
下载驱动
- 找到对应Qt版本的驱动,下载解压
https://github.com/thecodemonkey86/qt_mysql_driver/releases - 将libcrypto-1_1-x64.dll,libmysql.dll,libssl-1_1-x64.dll这3个文件复制到D:\Qt\6.4.2\mingw_64\bin文件夹中
- 再将解压缩后中的sqldrivers的两个mysql驱动文件复制到D:\Qt\6.4.2\mingw_64\plugins\sqldrivers中
调整代码
在CMakelists.txt 文件中
- 找到
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
替换为find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)
- 在
target_link_libraries(filename PRIVATE Qt$ {QT_VERSION_MAJOR}::Widgets)
后面添加一行
target_link_libraries(filename PRIVATE Qt${QT_VERSION_MAJOR}::Sql)
里面的 filename 就是文件名,要一致
连接 Mysql 数据库
检测 Mysql 驱动
//输出可用数据库
qDebug()<<"available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug()<<driver;
如果输出中含有MySQL,那么恭喜你说明你的qt有MySQL驱动了,可以进行下一步。
连接
!!!注意是连接数据库,要保证已经创建过该数据库才能链接。
创建数据库的操作 在安装链接中也有(用的图形化界面),也可以参考这个:
http://t.csdnimg.cn/GyNr9
在自己工程的cpp文件中加入
#include<QSqlDatabase>
#include<QDebug>
void MainWindow::on_pushButton_clicked()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //连接本地主机
db.setPort(3306);
db.setDatabaseName("db_name"); //Mysql 创建的数据库名称
db.setUserName("root");
db.setPassword("123456"); //安装 Mysql 设置的密码
bool ok = db.open();
if (ok){
qDebug() << "link success";
}
else {
qDebug() << "link failed";
}
}
测试输出link success,连接成功。
直接创建数据库使用
//创建数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
//设置数据库名字
db.setDatabaseName("login.db");
//打开数据库
if(db.open())
{
qDebug()<<"打开数据库成功"<<endl;
}else
{
qDebug()<<"打开数据库失败"<<endl;
}
成功后会在目录下生成.db文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)