MYSQL C++链接接口编程

news2025/4/26 18:36:32

使用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 --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 makeDebug rm -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.exe E3786A77EE4745719884FB6145701571D61AE3215C1A432CA0406ED5DFCDDA68D00A13194BD545C2BC3FEFA889BAFD02D3FEC2C5E7994FFEADE2B4DBBC89EA8D04C49E96CE034E61A6D53AC3EF6B6DE699ADE95D5F914A69AEAE7DC0B9B30344C8F136D2F5BF4CA6AB6C244AB62DC351C56A7CAC73AF48D4B7269D1A6082F1F6F8C6D0E5E07642DD90F749E331C771FAE4D2B686E92844A0BA3B8A3609605109C3F7233062E447B08748E5A470BA1938

测试平台移植

编译只带

 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 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. 执行以下命令进行编译和安装:

./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");

        // 创建一个schema
        mysqlx::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日志表数据完善篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1492238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打家劫舍(java版)

&#x1f4d1;前言 本文主要是【动态规划】——打家劫舍(java版)的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一…

QT对象树 | 内存泄漏

使用 Qt 框架构建 GUI 界面的程序 //widget.cpp #include "widget.h" #include "ui_widget.h" #include <QLabel>Widget::Widget(QWidget *parent) //这里的parent的意思是父级指针: QWidget(parent) //调用父类的构造函数, ui(new Ui::Widget) …

外包干了3个月,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

主备DNS服务器搭建并验证

目录 1. 配置静态网络 2. 配置主备DNS 2.1 DNS备服务器&#xff08;第二个虚拟机&#xff09; 2.2 两个虚拟机操作 2.3 备用服务器&#xff08;第二个虚拟机&#xff09;执行 2.4 两个虚拟机都添加DNS: 3. 验证 3.1 主DNS服务验证: 3.2 备用DNS服务器验证&am…

基于Springboot的足球俱乐部管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的足球俱乐部管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍: 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff…

C语言指针的初步认识--学习笔记(3)

1. 字符指针变量 在C语言中&#xff0c;字符串通常被视为字符数组&#xff0c;但它们可以有不同的表示方式。字符指针变量存储的是字符串的地址。这意味着&#xff0c;当你有一个字符串时&#xff0c;你可以通过改变字符指针的值来改变这个字符串&#xff0c;因为你实际上改变的…

22.欧拉方法、刚体模拟、流体模拟

一、一个粒子的模拟 规定一个物体在某一个时刻的速度和位置&#xff0c;如何解出某个时间之后它会出现在哪里 下图要求模拟一个粒子在速度场中要如何运动 速度场中&#xff0c;在任何一个位置&#xff0c;我们都有它的速度 写出来相当于是常微分方程 我们知道速度&#xff0c;…

find函数-秒了道题

秒了 笑死 还是规规矩矩做吧 string类的find()函数用于在字符串中查找字符或子串&#xff0c;返回第一个匹配的位置。 class Solution { public:int strStr(string haystack, string needle) {return haystack.find(needle);} };

基于灰狼算法GWO的城市三维无人机路径规划(复杂地形三维航迹路径规划)

摘要 本文提出了一种利用灰狼算法GWO来解决城市环境下无人机三维路径规划问题的方法。这种方法将复杂的无人机航迹规划任务转化为一个优化问题&#xff0c;然后运用灰狼算法GWO来解决这个优化问题。灰狼算法GWO是一种模拟灰狼种群捕猎行为的优化算法&#xff0c;它具备强大的全…

【TEE】内存完整性保护

Hash Functions&Merkle Tree 对读操作进行完整性检查&#xff0c;通过在加载的块上重新计算一个哈希&#xff0c;然后根据片外地址将得到的哈希与片上哈希比较。 缺点&#xff1a;不可承受的片上存储开销&#xff0c;并假设128位哈希和512位cache line&#xff0c;其开销为…

C++基于多设计模式下的同步异步日志系统day6

C基于多设计模式下的同步&异步日志系统day6 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&am…

JPA generator 生成实体类

1、配置生成实体类 选中表后点击右键 2、 Generate POJOs.groovy 配置 import com.intellij.database.model.DasTable import com.intellij.database.model.ObjectKind import com.intellij.database.util.Case import com.intellij.database.util.DasUtilimport java.text.S…

K次取反后最大化的数组和 加油站 分发糖果 柠檬水找零

1005.K次取反后最大化的数组和 力扣题目链接(opens new window) 给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#xff1a;我们选择某个索引 i 并将 A[i] 替换为 -A[i]&#xff0c;然后总共重复这个过程 K 次。&#xff08;我们可以多次选择同一个索引 i。&a…

类与对象(二)--类的六个默认成员函数超详细讲解

目录 1.类的默认六个成员函数✒️ 2.构造函数 2.1构造函数的概念✒️ 2.2构造函数的特性✒️ 3.析构函数 3.1析构函数的概念✒️ 3.2析构函数的特征✒️ 4.拷贝构造函数 4.1拷贝构造函数的概念✒️ 4.2拷贝构造函数的特征✒️ 4.3思考❓ 4.4深拷贝和浅拷贝⭐️…

嵊州吃喝玩乐篇

1. 豆腐馒头 胖大姐豆腐馒头&#xff08;推荐&#xff09; 地址: 嵊州市越秀路96-98号 高德地图搜 “胖大姐黄泽豆腐馒头” 黄泽豆腐馒头 地址&#xff1a;嵊州市越秀路111号 高德地图搜 “嵊州市玉英豆腐馒头店” 2. 烧烤 老张烧烤&#xff08;推荐&#xff09; 地址&a…

3.5作业

1.使用write 和 read 实现 文件夹拷贝功能&#xff0c;不考虑递归拷贝 #include<stdio.h> #include<string.h> #include<unistd.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> int main(in…

#stm32学习总结GPIO

1、 GPIO 1.1、简介 就是通用输入输出口 2&#xff0c; STM32 GPIO简介&#xff08;了解&#xff09; 2.1&#xff0c;GPIO特点 1&#xff0c;不同型号&#xff0c;IO口数量可能不一样&#xff0c;可通过选型手册快速查询 2&#xff0c;快速翻转&#xff0c;每次翻转最快只…

PTA L2-009 抢红包

题目&#xff1a; 没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录&#xff0c;请你统计一下他们抢红包的收获。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤104&#xff09;&#xff0c;即参与发红包和抢红包的总人数&#xff0c;则…

【网站项目】121开放式教学评价管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

EtherCAT运动控制器在ROS上的应用(上)

本文以正运动技术EtherCAT运动控制器ZMC432和ZMC408CE为例&#xff0c;介绍正运动技术运动控制器在ROS上的应用开发。 在正式学习之前&#xff0c;我们先了解一下正运动技术的EtherCAT运动控制器ZMC432和ZMC408CE。这两款产品分别是32轴&#xff0c;8轴EtherCAT运动控制器。 …