首页 > 数据库 >Qt编译MySQL驱动

Qt编译MySQL驱动

时间:2024-04-11 19:34:19浏览次数:16  
标签:QT 编译 MySQL 驱动 txt Qt

Qt编译MySQL驱动

参考:qt6.5.0MySQL驱动手动编译以及数据库连接详细教程以及注意事项附资源链接_qt编译mysql驱动-CSDN博客

由于MySQL等数据库的client库遵循的协议与GPL不兼容,因此Qt发布时不带有这些驱动,需要自行编译。

在Qt5版本的编译由于使用傻瓜式的qmake,要简单很多:QT出现没有MySQL驱动,手动编译步骤 - nanmi - 博客园 (cnblogs.com)

本文讲解Qt6使用cmake编译的步骤。

下载Qt源码

下载Qt对应版本的源码,注意Qt安装时才能安装对应版本的源码,之后再通过QMaintenance Tool就没有对应版本的源码选项了。

但实测拿相近的低版本源码应急一下还是可以的。

找到数据库驱动部分的源码

找到数据库驱动部分的源码,为了避免污染源码目录,可以将这个 sqldrivers 文件夹复制到其他目录。

注意 sqldrivers 文件夹才是数据库驱动部分的项目根目录,不信可以编译试试,会发现找不到一些Qt自定义的CMake函数。

image

安装MySQL

安装MySQL后,在安装路径下找到头文件和库文件:

image

拷贝这两个文件夹到某个路径不含空格和中文的地方,比如我拷贝到了 sqldrivers/mysql 下。

配置CMake

这部分我是怎么知道怎么配置的?就是看项目中的CMakeLists.txt,很容易看懂。

可以用QtCreator打开 sqldrivers 工程,配置三个环境变量,可以在 .cmake.conf 中写(因为这个文件会被顶层 CMakeLists.txt 引入):

image

然后尝试编译,我这里选的是Release,毕竟谁会去调试库:

image

即可在生成目录得到驱动的库文件:

(1)查看构建目录位置:

image

image

(2)将生成的库文件拷贝 Qt 插件目录:

image

如果用的是 PySide6,则同理需要拷贝到 PySide6 插件目录:

image

(3)将 MySQL client驱动库文件拷贝到 Qt 编译工具链根目录,这样以后直接就能用而无需指定库文件路径:

image

测试功能

新建一个 Qt 项目(控制台项目就行)

CMakeLists.txt 中添加依赖:

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Sql)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Sql)

target_link_libraries(mysql_test
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Sql
)

输入代码测试:

#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>

int main(int argc, char *argv[])
{
    qDebug() << QSqlDatabase::drivers();
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setDatabaseName("harbor");
    db.setUserName("root");
    db.setPassword("mysql123");
    db.setPort(3306);

    bool ok = db.open();
    if(ok) qInfo() << "OK";
    else qFatal() << "Error: " << db.lastError().text();
}
/*
QList("QSQLITE", "QMIMER", "QMARIADB", "QMYSQL", "QODBC", "QPSQL")
OK
*/

常见错误

找不到Qt

如果报错说找不到Qt,则需要按照提示设置一下变量:

Could not find a package configuration file provided by "QT" with any of the following names: Qt6Config.cmake qt6-config.cmake Qt5Config.cmake qt5-config.cmake Add the installation prefix of "QT" to CMAKE_PREFIX_PATH or set "QT_DIR" to a directory containing one of the above files.  If "QT" provides a separate development package or SDK, be sure it has been installed.

即在顶层 CMakeLists.txt 中设置 Qt 编译工具链路径:

image

再次尝试编译,应该就可以了。

路径错误

观察编译输出信息,可以看到错误原因是路径不能有空格和中文:

image

但是我们前面已经设置了一个不含空格和中文的路径啊?

这就要再去看看CMakeLists.txt:

项目顶层 CMakeLists.txt 中要求的是 QT_FEATURE_sql_mysql ,没写错啊:

image

但是查看 CMakeCache.txt,可以看到问题出在 Qt 编译工具链使用了 MySQL_INCLUDE_PATH ,这个变量是哪来的?

image

查看 QtCreator 自带设置的 CMake 变量,可以看到还设置了一个 MySQL_LIBRARY_DEBUG, 使用的路径是系统中 MySQL 的安装路径:

image

之前我不小心将前面设置在 .cmake.conf 中的环境变量设置为 MYSQL_INCLUDE_DIR ,打错了,导致使用的 QtCreator 设置的环境变量。

修正即可,记得删除 CMakeCache.txt 再重新编译。

标签:QT,编译,MySQL,驱动,txt,Qt
From: https://www.cnblogs.com/3to4/p/18129916

相关文章

  • EECE 6083/5183编译器项目
    EECE6083/5183编译器项目1编译器项目类项目是手工构建一个简单的递归体面(LL(1))编译器(不使用编译器诸如flex或antlr的构造工具)。你可以使用任何支持递归的命令式块结构编程语言,我可以为它安装一个标准的debian包在我的电脑上测试你的解决方案。学生在本课程中使用的语言示例包括:c、c......
  • docker 中使用 php--apache并加入 mysql 插件
    官方镜像说明页:可根据自己需要,选择对应版本的php进行下载。这里使用php7.4+apache服务的镜像为例:dockerpullphp:7.4.33-apache运行容器:dockerrun--namejiuta-php-apache-7.4-d-p9000:80\-v/mnt/datadisks/docker-root/jiuta/www:/var/www/html\--log-o......
  • 新建一个mysql存储过程
    CREATEDEFINER=`root`@`%`PROCEDURE`updateWorker303`()BEGINDECLAREdoneINTDEFAULTFALSE;DECLARErosteridVARCHAR(50);DECLAREphoneVARCHAR(50);DECLAREworkStatsVARCHAR(50);DECLAREcur1CURSORFORSELECTF_Id,F_Phone,F_WorkerStatusFRO......
  • MySQL8.0加密规则修改为mysql_native_password
    参考https://blog.csdn.net/lcy1619260/article/details/132302008用软件登陆的Mysql8数据库时,报错:Authenticationplugin'caching_sha2_password'cannotbeloaded出现这个原因是mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2......
  • mysql多版本共存问题
    进入MySQL官网正常去下载两个版本,可以参考我之前的笔记下一步的时候,记得选端口,比如我的MySQL8版本用的是3306端口,那么我的MySQL5.7.44用的就是3307端口如果要再命令行中使用指定版本的MySQL,可以结合命令去使用,命令解释如下:你可以使用以下命令通过端口号连接MySQL数据库:mysql......
  • MySQL - [07] 查看库表数据所使用的空间大小
     1、切换数据库:useinformation_schema;2、查看数据库使用大小SELECTconcat(round(sum(data_length/1024/1024),2),'MB')asdataFROMinformation_schema.tablesWHEREtable_schema='DB_Name';3、查看表使用大小SELECTconcat(ROUND(SUM(data_length......
  • 补充 windows系统安装多个MySQL版本
    一、为什么想要安装多个版本?如果你发现自身的mysql太低,不能完好的导入sql文件,又因为原本的mysql的存储重要数据,于是多开的mysql的想法出现,其实就是开个其他的端口,不要和原本的3306冲突就行。二、MySQL8.0下载MySQL8.0下载地址:https://dev.mysql.com/downloads/mysql/下载原......
  • Rust 的条件编译机制
    基本原理Rust提供了一个[cfg]的编译选项,允许你基于一个传递给编译器的标记编译代码,有两种形式:#[cfg(foo)]如果foo设置了编译对应代码;#[cfg(bar="baz")]如果bar="baz",则编译对应代码;比如:fnmain(){#[cfg(feature="foo")]println!("fooenable......
  • 编译原理(清华大学版)第二章
    第二章文法和语言符号和符号串字母表是元素的非空有穷集合字母表中的元素称为符号字母表中的符号可以组成的任何又穷序列称为符号串符号串运算:1.符号串的头尾,固有头和固有尾​ \(z=xy,只对头感兴趣则可以写为z=x...\)2.符号串的链接​ $符号串x、y,连接之后为xy;\spac......
  • 从 Oracle 到 MySQL 数据库的迁移之旅
    目录引言一、前期准备工作1.搭建新的MySQL数据库2.建立相应的数据表2.1数据库兼容性分析2.1.1字段类型兼容性分析2.1.2函数兼容性分析2.1.3是否使用存储过程?存储过程的个数?复杂度?2.1.4是否使用触发器?个数?使用的场景?2.2建表过程中其他需要注意的事项3.为项目配置Oracle和MyS......