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…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...
