当前位置: 首页 > news >正文

编译QT Mysql库并集成使用

安装MSVC编译器与Windows 10 SDK

打开Visual Studio Installer,如果已经安装过内容了可能是如下页面,点击修改(头一回打开的话不需要这一步):
[图片]

然后在工作负荷中勾选使用C++的桌面开发,它会帮我们勾选好一些组件,以及一个Windows 10 SDK:
[图片]

选择win10 sdk
[图片]

在单个组件中勾选自己要安装的编译器,此处安装了MSVC2015、MSVC2017、MSVC2019:
[图片]

QCreator编译mysql dll

1.查看当前QT在msvc2017_64下的数据库插件类型
[图片]

检查mingw73_64/plugins/sqldrivers目录下是否存在qsqlmysql.dll文件,没有就需要编译mysql驱动。
2.在项目中,选择需要构建的源目录
[图片]

3.点击编辑,打开mysql.pro文件进行配置
[图片]

附mysql.pro源文件:

TARGET = qsqlmysqlHEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp#QMAKE_USE += mysqlOTHER_FILES += mysql.jsonPLUGIN_CLASS_NAME = QMYSQLDriverPlugininclude(../qsqldriverbase.pri)LIBS += "D:\Library\mysql-5.7.32-winx64\lib\libmysql.lib"
INCLUDEPATH += "D:\Library\mysql-5.7.32-winx64\include"
DESTDIR = ../mysql/qtMyLib

附qsqldriverbase.pri文件:

QT  = core core-private sql-private# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)include(./configure.pri)PLUGIN_TYPE = sqldrivers
load(qt_plugin)DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

4.下载mysql对应版本的内容
https://downloads.mysql.com/archives/community/
[图片]

解压如下:
[图片]

5.进行编译
[图片]

先点锤子,再点执行,出现如下图片即成功:
[图片]

(1)出现错误:QMAKE_MSC_VER isn’t set

进入文件夹D:\Library\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common,打开msvc-version.conf文件,添加
QMAKE_MSC_VER = 1900,对应如下:
[图片]

(2)出现错误:Library ‘mysql’ is not defined,在qt左侧栏中双击打开mysql.pro

将#QMAKE_USE += mysql这一行注释掉

(3)mysql和编译器的位数要一致,mysql是64位,那么上述三个文件都要复制到64位的编译器中

一定要复制到mysql对应位数的编译器中,然后在构建的时候,注意选择需要生成的应用是32位还是64位。

6.DESTDIR 定义编译后lib的路径,寻找编译后的数据
[图片]

7.将文件复制到编译器的5.14.2\msvc2017_64\plugins\sqldrivers中
[图片]

8.将mysql的dll复制到项目的执行目录下
[图片]

(4)QSqlDatabase::drivers 返回空

把5.14.2\msvc2017_64\plugins\sqldrivers文件夹全部拷贝到项目的执行目录下。
[图片]

QSqlDatabase集成mysql

1.cmakelist添加SQL依赖

find_package(Qt5 COMPONENTSCoreGuiWidgetsSqlREQUIRED)add_executable(QtDemo2 main.cppsql_process.hsql_process.cpp)target_link_libraries(QtDemo2Qt5::CoreQt5::GuiQt5::WidgetsQt5::Sql
)

2.新建表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (`id` INT(11) NOT NULL AUTO_INCREMENT,`username` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`password` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`permission` INT(2) NOT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 40 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (1, 'admin', '123456', 1);
INSERT INTO `users` VALUES (32, 'xfgc', '肖1111', 2);
INSERT INTO `users` VALUES (39, '123', '哲222', 1);SET FOREIGN_KEY_CHECKS = 1;

3.sql常用操作

//
// Created by zhe.xiao on 2023/11/22.
//#include "sql_process.h"
#include <QSqlDatabase>
#include <QStringlist>
#include <QSqlQuery>
#include <QVariant>
#include <QSqlError>
#include <QSqlRecord>void SqlProcess::connect()
{qDebug("SqlProcess started....");QSqlDatabase dbLink = QSqlDatabase::addDatabase("QMYSQL");dbLink.setPort(3306);dbLink.setDatabaseName("ws300");dbLink.setHostName("localhost"); //连接本地主机dbLink.setUserName("root");dbLink.setPassword("Xi1ozh#1");if (!dbLink.open()){qDebug("SqlProcess QSqlDatabase Database Open Failed!!");}QSqlQuery query(dbLink);QString sql = QString("select * from users;");if (query.exec(sql)){qDebug("SqlProcess QSqlQuery Succceed!!");int fieldNo = query.record().indexOf("password");while (query.next()){std::string a1 = query.value(fieldNo).toString().toStdString();std::string b1 = query.value(1).toString().toStdString();std::string c1 = query.value(2).toString().toStdString();std::string d1 = query.value(3).toString().toStdString();qDebug("SqlProcess QSqlQuery Data %s %s %s %s", a1.c_str(), b1.c_str(), c1.c_str(), d1.c_str());}}dbLink.close();qDebug("SqlProcess finished....");
}
http://www.lryc.cn/news/241265.html

相关文章:

  • 利用企业被执行人信息查询API保障商业交易安全
  • 【深度学习】P1 深度学习基础框架 - 张量 Tensor
  • vue2 识别页面参数中的html
  • matlab 一些画图法总结(持续更新)
  • MDK AC5和AC6是什么?在KEIL5中添加和选择ARMCC版本
  • 杰发科技AC7801——EEP内存分布情况
  • 【mybatis注解实现条件查询】
  • 【广州华锐互动】VR线上课件制作软件满足数字化教学需求
  • MySQL 中 DELETE 语句中可以使用别名么?
  • flutter创建不同样式的按钮,背景色,边框,圆角,圆形,大小都可以设置
  • 【C++】标准模板库STL作业(其二)
  • 基于SpringBoot+Redis实现点赞/排行榜功能,可同理实现收藏/关注功能,可拓展实现共同好友/共同关注/关注推送功能
  • AI“胡说八道”?怎么解?
  • [SIGGRAPH-23] 3D Gaussian Splatting for Real-Time Radiance Field Rendering
  • 大话设计模式C++实现
  • IT 领域中的主要自动化趋势
  • 使用Python解析CAN总线
  • DevExpress中文教程 - 如何在macOS和Linux (CTP)上创建、修改报表(下)
  • RAID的应用场景以及优缺点
  • java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案 小程序商城免费搭建
  • [Linux] shell脚本的函数和数组
  • 万宾科技智能井盖的效果怎么样?
  • nvm切换版本之后npm用不了
  • 【elementui】el-popover在列表里循环使用,取消的doClose无效解决办法
  • 【php】解决加载速度慢导出超时问题记录
  • postgresql安装fdw扩展
  • 反爬虫机制与反爬虫技术(二)
  • Grails 启动
  • 2023年亚太地区数学建模大赛 问题A
  • 基于springboot实现校园在线拍卖系统项目【项目源码】