MYSQL C++链接接口编程
使用MYSQL 提供的C++接口来访问数据库,官网比较零碎,又不想全部精读一下,百度CSDN都是乱七八糟的,大部分不可用
官网教程地址
https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-examples-connecting.html
网上之所以乱七八糟,主要是MYSQL提供了3个接口两个包,使用两种语言交叉编程. 可以用GCC编辑C语言调用C++接口. 可以用C++语言调用C接口.
分别是C 接口, C++接口 MYSQLX接口. 三个接口两个包.
C包和C++包, C++包(Connector/C++)里面从官网下载,
而C包从MYSQL服务端包里抠出来.
C++包里面包含JDBC接口和MYSQLX, 怎么JDBC不是JAVA的应用接口吗?
不知道为什么用这4个字母! 今天我们得用JDBC目录下的C++接口
C接口文件 libmysqlclient.so, libmysqlclient.a 分静态和动态.从服务端解压LIB获得, 头文件从INCLUDE获得.

另外 开发包可以通过YUM来安装
yum install –y libmysqlclient-devyum install –y libmysqlcppconn-dev
sudo rpm -ivh mysql-connector-c++-devel-8.0.20-1.el7.x86_64.rpm --nodeps --force
sudo rpm -ivh mysql-connector-c++-8.0.20-1.el7.x86_64.rpm --nodeps --force
sudo rpm -ivh mysql-connector-c++-jdbc-8.0.20-1.el7.x86_64.rpm --nodeps --force
![]()
从官网下载
https://downloads.mysql.com/archives/community/

之所以选择8.0.11 是基于 CENTOS7 环境. C++要求比较多 最烦的是OPENSSL的版本,还有GLIBC版本,以及BOOST版本, 太高了还对GCC版本有要求. 升级GCC版本 还得涉及CMAKE,MAKE版本涉及. 这就太扯了,我就是为了这点多巴胺快乐.要我付出那么多痛苦. 这时跟PYTHON没啥区别. 还不如用GO简单!
查看系统对应GLIBC 版本
[root@dsmart=>lib]$ldd --versionldd (GNU libc) 2.17Copyright (C) 2012 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Written by Roland McGrath and Ulrich Drepper.
查看系统对应的OPENSSL 版本
[shark@sharkdb=>DelBigTable]$openssl version -aOpenSSL 1.0.1e-fips 11 Feb 2013built on: Tue Jun 17 17:23:54 UTC 2014platform: linux-x86_64options: bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASMOPENSSLDIR: "/etc/pki/tls"engines: rdrand dynamic
安装BOOST开发库
[root@sharkdb test_connect_mysql8]# yum install boost-devel已加载插件:fastestmirror, langpacksLoading mirror speeds from cached hostfile* base: linux.mirrors.es.net* extras: centos-distro.1gservers.com* updates: opencolo.mm.fcix.net正在解决依赖关系--> 正在检查事务---> 软件包 boost-devel.x86_64.0.1.53.0-28.el7 将被 安装--> 解决依赖关系完成
YUM 安装开发库
yum install –y libmysqlclient-dev #C语言接口yum install –y libmysqlcppconn-dev #C++语言接口
一般会安装在这两个目录下
/usr/local/mysql/include/usr/local/mysql/lib
还需要向公共目录安装软链接
ln -s /usr/local/mysql/libmysqlclient.so.18/usr/lib/libmyqlclient.so
目录不一定正确 可能是 /usr/lib64/mysql/lib... ==>/usr/sbin/lib/....
头文件
安装在系统目录下 使用尖挂号<>
C语言头文件
#include <stdio.h>#include <mysql.h>
C++语言头文件
#include <iostream>#include <mysql_connection.h>#include <mysql_driver.h>#include <cppconn/driver.h>#include <cppconn/resultset.h>#include <cppconn/statement.h>
因为我们通过从官网下载C++链接接口,所以不YUM 安装了
进行解压 tar –zxvf

解压后进入两到三级目录查看

可以看到2个子目录 分别是C++接口和分布式接口

库目录有3个库文件,加密库LIBCRYPTO.SO
,链接库LIBMYSQLCPPONN.SO
LIBSSL.SO库,静态链接库libmysqlcppconn-static.a
另外个MYSQLCPPONN8 忘记干啥子用的.没关系反正不使用它

MYSQL C++接口应用 基础需要3个动态链接库就行了
把 INCLUDE 和LIB放入项目目录下
cp -r include/ /home/Project/CPP_MYSQLCp –r lib64/ /home/Project/CPP_MYSQL
用VIM 编辑我们的代码,这里我们用双引号
#include <iostream>
#include "include/jdbc/mysql_connection.h"
#include "include/jdbc/mysql_driver.h"
#include "include/jdbc/cppconn/driver.h"
#include "include/jdbc/cppconn/resultset.h"
#include "include/jdbc/cppconn/statement.h"using namespace std;
using namespace sql;int main()
{try {// 创建MySQL连接Driver* driver = get_driver_instance();Connection* con = driver->connect("tcp://192.168.0.62:3306", "manjo_lts", "tR9zWedofe@soeeJf");// 连接到test数据库con->setSchema("lts");// 执行一条查询语句Statement* stmt = con->createStatement();ResultSet* res = stmt->executeQuery("SELECT * FROM lts_cron_job_queue");while (res->next()) {cout << res->getString("job_id") << endl;}// 清理连接资源delete res;delete stmt;delete con;} catch (SQLException& e) {cout << "SQLException: " << e.getErrorCode() << " " << e.what() << endl;}return 0;
} // 内存分配失败
编译命令
[root@sharkdb test_connect_mysql8]# cat makeDebugrm -f nohup.outnohup g++ -g main.cpp -std=c++11 -I ./include -L./lib64 -lmysqlcppconn -lssl -lcrypto -Wl,-rpath,'lib64' -o main.exe
编译命令解释:
-g 带调试信息
-std=c++11 使用C++11标准 或者高版本std=c++17
-I 大写i 表示头文件从当前目录找
-L 动态链接库目录
-l 哪个动态链接库的文件名, 要掐头取尾 mysqlcppconn ssl crypto
-Wl,-rpath,'lib64' 表示 运行过程中动态库优先搜索目录 本地子目录lib64
-o main.exe 输出可执行文件
重点就是 WL,-RPATH 运行时候先从程序所在的目录下找动态库
运行OK
[root@sharkdb test_connect_mysql8]# ./main.exeE3786A77EE4745719884FB6145701571D61AE3215C1A432CA0406ED5DFCDDA68D00A13194BD545C2BC3FEFA889BAFD02D3FEC2C5E7994FFEADE2B4DBBC89EA8D04C49E96CE034E61A6D53AC3EF6B6DE699ADE95D5F914A69AEAE7DC0B9B30344C8F136D2F5BF4CA6AB6C244AB62DC351C56A7CAC73AF48D4B7269D1A6082F1F6F8C6D0E5E07642DD90F749E331C771FAE4D2B686E92844A0BA3B8A3609605109C3F7233062E447B08748E5A470BA1938
测试平台移植
编译只带
g++ -g main.cpp -std=c++11 -I ./include -L./lib64 -lmysqlcppconn -Wl,-rpath,'lib64' -o main.exe
运行报丢失两个动态库
[root@dsmart=>CPP_MYSQL]$./main2.exe./main2.exe: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory[root@dsmart=>CPP_MYSQL]$./main2.exe./main2.exe: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory
把两个移到LIB64目录下. 注意软链接不生效

运行就OK了
其它知识
OPENSSL版本
[root@dsmart=>mysql-]$openssl versionOpenSSL 1.0.2k-fips 26 Jan 2017
系统OPENSSL 安装包
]$rpm -aq | grep opensslopenssl-devel-1.0.2k-26.el7_9.x86_64openssl-libs-1.0.2k-26.el7_9.x86_64openssl-1.0.2k-26.el7_9.x86_64
卸载
rpm -e openssl-1.0.2k --nodeps
安装
基本很难找到RPM的
rpm -ivh openssl-1.1.1n-1.el7.x86_64.rpm --nodeps
二进制安装模式
去官网下载1.1.1
https://www.openssl.org/source/old/1.1.1/index.html
2. 执行以下命令进行编译和安装:
./configmakemake testsudo make install
基本编译有错误. 我就没有继续折腾下去了
AI推荐的 MYSQLX接口用法, 本仙没有测试通过!
#include <iostream>
#include <mysqlx/xdevapi.h>int main() {try {mysqlx::Session session("localhost", 3306, "username", "password", "database");// 创建一个schemamysqlx::Schema schema = session.getSchema("database", true);// 创建一个表schema.createTable("table_name", true,[](mysqlx::TableBuilder &builder) {builder.addColumn("id", mysqlx::ColumnType::INT, true).primaryKey();builder.addColumn("name", mysqlx::ColumnType::STRING);});// 插入一行数据mysqlx::Table table = schema.getTable("table_name");table.insert("name").values("Alice").execute();// 查询数据mysqlx::RowResult result = table.select("name").where("name = :name").bind("name", "Alice").execute();for (const mysqlx::Row &row : result) {std::cout << "Name: " << row[0] << std::endl;}} catch (const std::exception &e) {std::cerr << "Error: " << e.what() << std::endl;}return 0;
}
推荐阅读
GCC 内联汇编
用VSCODE 编辑编译调试MYSQL8
用C去删除MYSQL日志表数据完善篇
相关文章:
MYSQL C++链接接口编程
使用MYSQL 提供的C接口来访问数据库,官网比较零碎,又不想全部精读一下,百度CSDN都是乱七八糟的,大部分不可用 官网教程地址 https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-examples-connecting.html 网上之所以乱七八糟,主要是MYSQL提供了3个接口两个包,使用…...
并发编程中常见的设计模式,c++多线程如何设计
C多线程设计(任务的“多对一”、“一对多”、“多对多”情况 该如何设计线程?) C书籍中并未找到对多线程设计,有很完整详细的总结!!C并发编程书籍中也只是一些理论或则零散的多线程实例。无奈,…...
解决android studio build Output中文乱码
1.效果如下所示: 代码运行报错的时候,Build Output报的错误日志中中文部分出现乱码,导致看不到到底报的什么错。 2.解决办法如下: 点击Android studio开发工具栏的Help-Edit Custom VM Options....,Android studio会…...
[云原生] K8s之pod进阶
一、pod的状态说明 (1)Pod 一直处于Pending状态 Pending状态意味着Pod的YAML文件已经提交给Kubernetes,API对象已经被创建并保存在Etcd当中。但是,这个Pod里有些容器因为某种原因而不能被顺利创建。比如,调度不成功(…...
[Unity3d] 网络开发基础【个人复习笔记/有不足之处欢迎斧正/侵删】
TCP/IP TCP/IP协议是一 系列规则(协议)的统称,他们定义了消息在网络间进行传输的规则 是供已连接互联网的设备进行通信的通信规则 OSI模型只是一个基本概念,而TCP/IP协议是基于这个概念的具体实现 TCP和UDP协议 TCP:传输控制协议,面向连接,…...
Tomcat的配置文件
Tomcat的配置文件详解 一.Tomcat的配置文件 Tomcat的配置文件默认存放在$CATALINA_HOME/conf目录中,主要有以下几个: 1.server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息&#x…...
猴子吃桃问题(python版)
文章预览: 题目python解法一:运行结果 python解法二:运行结果 python解法三:运行结果 题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早…...
C语言入门到精通之练习49:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的 *。
题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的 *。 程序分析:无。 实例 #include<stdio.h> #include<stdlib.h> int main() {int n,i,j;printf("请输入…...
如何在Windows轻量应用服务器上安装和配置SSH?
如何在Windows轻量应用服务器上安装和配置SSH? 检查OpenSSH的可用性:首先,需要以管理员身份打开PowerShell并运行命令Get-WindowsCapability - Online | Where-Object Name - like OpenSSH*来检查OpenSSH服务是否可用。如果服务未启动或不可…...
leetcode日记(36)全排列
想思路想了很久……思路对了应该会很好做。 我的思路是这样的:只变化前n个数字,不断增加n,由2到nums.size(),使用递归直到得到所有结果 代码如下: class Solution { public:vector<vector<int>> permut…...
Flink:动态表 / 时态表 / 版本表 / 普通表 概念区别澄清
博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…...
异常网络下TCP的可靠服务机制(慢启动、拥塞避免、快重传、快恢复)
目录 TCP超时重传拥塞控制概述慢启动和拥塞避免下面讲解发送端如何判断拥塞发生。 快速重传和快速恢复 本文描述TCP在异常网络下的处理方式 以保证其可靠的数据传输的服务 TCP超时重传 tcp服务能够重传其超时时间内没有收到确认的TCP报文段,tcp模块为每一个报文段都…...
PL/SQL执行.sql文件
1.编写.sql文件,创建update.sql文件,文件如下: set feedback off set define off --更新表中所有人的年龄 update a set age18; prompt Done. 2.打开plsql选择命令窗口,即选择File->New->Command Window; 打…...
赋能中国制造,大道云行发布智能制造分布式存储解决方案
《中国制造2025》指出,“制造业是国民经济的主体,是立国之本、兴国之器、强国之基。” 智能制造引领产业提质增效 智能制造是一种利用先进的信息技术、自动化技术和智能技术来优化和升级制造业生产过程的方法。它将人工智能、大数据、物联网、机器学习等…...
MySQL Strict Mode is not set for database connection ‘default‘
在使用 DJango 框架执行迁移文件的命令时,可以看到出现如下警告: (ll_env) D:\workspace\workspace-mengll\learning-log>python manage.py migrate System check identified some issues: WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set …...
分享:大数据信用报告查询的价格一般要多少钱?
现在很多人都开始了解自己的大数据信用了,纷纷去查大数据信用报告,由于大数据信用与人行征信有本质的区别,查询方式和价格都不是固定的,本文就为大家详细讲讲大数据信用报告查询的价格一般要多少钱,希望对你有帮助。 大…...
tomcat下载安装配置教程
tomcat下载安装配置教程 我是使用tomcat下载安装及配置教程_tomcat安装-CSDN博客 此贴来进行安装配置,原文21年已经有些许不同。 下载tomcat 官网:http://tomcat.apache.org/ 我们老师让安装8.5以上,所以我直接选择版本9 点击9页面之后…...
GO—变量
Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性。 我们从计算机系统的角度来讲,变量就是一段或者多段内存,用于存储数据 1.1 标准格式 var 变量名 变量类型 1 …...
【计算机毕业设计】044学生管理系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
揭秘App访问量背后的秘密:数据统计与分析
在移动互联网时代,App已成为人们日常生活的重要组成部分。对于App运营者来说,了解用户的访问量、行为习惯等数据至关重要。本文将深入探讨如何精准统计App访问量,为运营者提供有价值的数据支持。 一、App访问量统计的重要性 访问量是衡量A…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
