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-dev
yum 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 --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
查看系统对应的OPENSSL 版本
[shark@sharkdb=>DelBigTable]$openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Tue Jun 17 17:23:54 UTC 2014
platform: linux-x86_64
options: 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_ASM
OPENSSLDIR: "/etc/pki/tls"
engines: rdrand dynamic
安装BOOST开发库
[root@sharkdb test_connect_mysql8]# yum install boost-devel
已加载插件:fastestmirror, langpacks
Loading 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_MYSQL
Cp –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 makeDebug
rm -f nohup.out
nohup 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.exe
E3786A77EE4745719884FB6145701571
D61AE3215C1A432CA0406ED5DFCDDA68
D00A13194BD545C2BC3FEFA889BAFD02
D3FEC2C5E7994FFEADE2B4DBBC89EA8D
04C49E96CE034E61A6D53AC3EF6B6DE6
99ADE95D5F914A69AEAE7DC0B9B30344
C8F136D2F5BF4CA6AB6C244AB62DC351
C56A7CAC73AF48D4B7269D1A6082F1F6
F8C6D0E5E07642DD90F749E331C771FA
E4D2B686E92844A0BA3B8A3609605109
C3F7233062E447B08748E5A470BA1938
测试平台移植
编译只带
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 version
OpenSSL 1.0.2k-fips 26 Jan 2017
系统OPENSSL 安装包
]$rpm -aq | grep openssl
openssl-devel-1.0.2k-26.el7_9.x86_64
openssl-libs-1.0.2k-26.el7_9.x86_64
openssl-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. 执行以下命令进行编译和安装:
./config
make
make test
sudo 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…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...