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 --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日志表数据完善篇

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

输入一个字符串,将其中的数字字符移动到非数字字符之后

输入一个字符串&#xff0c;将其中的数字字符移动到非数字字符之后&#xff0c;并保持数字字符贺非数字字符输入时的顺序。 代码&#xff1a; #include <cstdio> #include <queue> using namespace std; int main() {char str[200];fgets(str, 200, stdin);//读入…

【详识JAVA语言】输入输出

输出到控制台 基本语法 System.out.println(msg); // 输出一个字符串, 带换行System.out.print(msg); // 输出一个字符串, 不带换行System.out.printf(format, msg); // 格式化输出 println 输出的内容自带 \n, print 不带 \n printf 的格式化输出方式和 C 语言的 printf 是基…

UE蓝图 编译过程详解

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 UE蓝图 函数调用(CallFunction)节点和源码 UE蓝图 序列(Sequence)节点和源…

BUUUCTF---LSB1

1.题目描述&#xff08;提示lsb&#xff09; 2.下载附件是一张图片 3.在010编辑器中查看没有发现什么信息&#xff0c;再看属性也没有什么有用的信息&#xff0c;根据题目提示lsb想到用Stegsolve这个工具 4.在该工具中打开图片 5.先将红绿蓝三种颜色的通道设置成0&#xff0c;…

如何使用Potplayer远程访问本地群晖NAS搭建的WebDAV中的本地资源

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是&#xff1a;1 使用环境要求&#xff1a;2 配置webdav3 测试局域网使用potplayer访问webdav3 内网穿透&#xff0c;映射至公网4 使用固定地址在potplayer访问webdav ​ 国内流媒体平台的内…

Spring八股 常见面试题

什么是Spring Bean 简单来说&#xff0c;Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象&#xff0c;这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。 将一个类声明为 Bean 的注解有哪些? Com…

什么是虚拟DOM,有什么作用?有了解过diff算法吗?

虚拟DOM&#xff08;Virtual DOM&#xff09;&#xff1a; 虚拟DOM是一个轻量级的JavaScript对象&#xff0c;它是真实DOM&#xff08;Document Object Model&#xff09;的抽象表示。开发者通过操作这个JavaScript对象来描述视图层的状态&#xff0c;当这个状态发生变化时&…

STL容器之vector类

文章目录 STL容器之vector类1、vector的介绍2、vector的使用2.1、vector的常见构造2.2、vector的iterator的使用2.3、vector空间增长问题2.4、vector的增删查改2.5、vector迭代器失效问题 3.vector的模拟实现 STL容器之vector类 1、vector的介绍 vector是表示可变大小数组的序…

常用网络协议的学习

TCP/IP TCP/IP的定义 TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/互联网协议&#xff09;是互联网的基本协议&#xff0c;也是国际互联网络的基础。 TCP/IP 不是指一个协议&#xff0c;也不是 TCP 和 IP 这两个协议的合称…

天津廉租房如何申请取得廉租住房租房补贴资格

如何申请廉租住房租赁补贴资格&#xff1f; 低收入住房困难家庭应当向户籍所在地街道办事处&#xff08;乡镇人民政府&#xff09;提出申请。 申请时&#xff0c;您需要提供以下要求的原件和复印件&#xff1a; &#xff08;一&#xff09;您及家人的身份证件&#xff1b; &a…

海外代理IP干货:应该选择SOCKS55代理还是Http代理?

在使用IPFoxy全球代理时&#xff0c;选择 SOCKS55代理还是HTTP代理&#xff1f;IPFoxy代理可以SOCKS55、Http协议自主切换&#xff0c;但要怎么选择&#xff1f;为解决这个问题&#xff0c;得充分了解两种代理的工作原理和配置情况。 在这篇文章中&#xff0c;我们会简要介绍 …

每日一类:Qt GUI开发的基石《QWidget》

深入探索QWidget&#xff1a;Qt GUI开发的基石 在Qt框架中&#xff0c;QWidget类扮演着构建图形用户界面&#xff08;GUI&#xff09;的基础角色。它不仅提供了窗口的基本功能&#xff0c;还允许开发者通过继承和定制来创建各式各样的用户界面元素。本文将详细介绍QWidget的关…

低功耗运放D722,具有9MHz的高增益带宽积,转换速率为8.5V/μs

D722是低噪声、低电压、低功耗运放&#xff0c;应用广泛。D722具有9MHz的高增益带宽积&#xff0c;转换速率为8.5V/μs&#xff0c;静态电流为1.7mA&#xff08;5V电源电压&#xff09;。D722具有低电压、低噪声的特点&#xff0c;并提供轨到轨输出能力&#xff0c;D722的最大输…

vue实现自定义树形穿梭框功能

需求&#xff1a; 我们在开发过程中&#xff0c;会遇到需要将一个数据选择做成穿梭框&#xff0c;但是要求穿梭框左侧为树形结构、右侧为无层级结构的数据展示&#xff0c;ElementUI自身无法在穿梭框中添加树形结构&#xff0c;网上搜到了大佬封装的插件但是对于右侧的无树形结…

Go字符串实战操作大全!

目录 1. 引言文章结构概览 2. Go字符串基础字符串的定义与特性什么是字符串&#xff1f;Go字符串的不可变性原则 字符串的数据结构Go字符串的内部表达byte和rune的简介 3. 字符串操作与应用3.1 操作与应用字符串连接字符串切片字符串查找字符串比较字符串的替换字符串的大小写转…

androidapp开发工具,Android MVP模式详解

**工欲善其事必先利其器&#xff0c;要想拿到满意的offer&#xff0c;必须有一定的准备。**以下列出来的东西是笔者认为应该准备的东西 简历中提到的&#xff0c;一定要有准备&#xff0c;别给自己挖坑Java准备&#xff0c;Java基础&#xff0c;有的公司会扣的很细&#xff0c…

自动驾驶技术详解

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;自动驾驶技术 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 目录 一 自动驾驶视觉感知算法 1目标检测 1.1 两阶…

挑战30天学完Python:Day28 数据库Mysql

&#x1f389; 本系列为Python基础学习&#xff0c;原稿来源于 30-Days-Of-Python 英文项目&#xff0c;大奇主要是对其本地化翻译、逐条验证和补充&#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学&#xff0c;或仅了解Python一点知识&#xff0c;但又没…

Dsco Dropship EDI需求分析

供应商要想从Dsco处通过EDI获取订单&#xff0c;需要部署自己的EDI系统&#xff0c;与Dsco的EDI供应商CommerceHub 建立连接&#xff0c;分为两个方向&#xff1a; 1.从CommerceHub 的 Dsco 平台获取 EDI 850 采购订单 2.向Dsco发送库存&#xff08;846&#xff09;、订单状态…

中仕公考:2024年安徽省直事业单位发布公告

2024年度安徽省直事业单位统一招聘发布公告&#xff0c;具体考试时间如下&#xff1a; 报名时间&#xff1a;2024年3月5日9.00-3月11日18.00 缴费时间&#xff1a;2024年3月13日18.00前 打印准考证时间&#xff1a;2024年3月27日-3月29日 笔试时间&#xff1a;2024年3月30日…