第三方库认识- Mysql 数据库 API 认识
文章目录
- 一、msyql数据库API接口
- 1.初始化mysql_init()——mysql_init
- 2.链接数据库mysql_real_connect——mysql_real_connect
- 3.设置当前客户端的字符集——mysql_set_character_set
- 4.选择操作的数据库——mysql_select_db
- 5.执行sql语句——mysql_query
- 6.保存查询结果到本地——mysql_store_result
- 7.获取结果集中的行数与列数—— mysql_num_rows/mysql_num_fields
- 8.遍历结果集——mysql_fetch_row
- 9.释放结果集——mysql_free_result
- 10.关闭数据库客户端连接,销毁句柄——mysql_close
- 11.获取mysql接口执行错误原因——mysql_error
- 创建测试用库和表
- 使用API实现数据的增删改查操作
一、msyql数据库API接口
1.初始化mysql_init()——mysql_init
mysql_init API文档链接别点了,也没样例代码,反正我是看不懂。
要使用库,必须先进行初始化!
函数:
MYSQL *mysql_init(MYSQL *mysql);
- 参数为空则动态申请句柄空间进行初始化
- 失败返回NULL
样例:
2.链接数据库mysql_real_connect——mysql_real_connect
初始化完毕之后,必须先链接数据库,进行后续操作。(mysql网络部分是基于TCP/IP的)
函数:
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd,const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);
- mysql–初始化完成的句柄
- host—连接的mysql服务器的地址
- user—连接的服务器的用户名
- passwd-连接的服务器的密码
- db ----默认选择的数据库名称
- port—连接的服务器的端口: 默认0是3306端口
- unix_socket—通信管道文件或者socket文件,通常置NULL
- client_flag—客户端标志位,通常置0
- 返回值:成功返回句柄,失败返回NULL
3.设置当前客户端的字符集——mysql_set_character_set
函数:
int mysql_set_character_set(MYSQL *mysql, const char *csname)
- mysql–初始化完成的句柄
- csname–字符集名称,通常:“utf8”
- 返回值:成功返回0, 失败返回非0;
4.选择操作的数据库——mysql_select_db
函数:
int mysql_select_db(MYSQL *mysql, const char *db)
- mysql–初始化完成的句柄
- db-----要切换选择的数据库名称
- 返回值:成功返回0, 失败返回非0;
5.执行sql语句——mysql_query
函数:
int mysql_query(MYSQL *mysql, const char *stmt_str)
- mysql–初始化完成的句柄
- stmt_str–要执行的sql语句
- 返回值:成功返回0, 失败返回非0;
6.保存查询结果到本地——mysql_store_result
函数:
MYSQL_RES *mysql_store_result(MYSQL *mysql)
- mysql–初始化完成的句柄
- 返回值:成功返回结果集的指针, 失败返回NULL;
7.获取结果集中的行数与列数—— mysql_num_rows/mysql_num_fields
函数:
uint64_t mysql_num_rows(MYSQL_RES *result);
- result–保存到本地的结果集地址
- 返回值:结果集中数据的条数
函数:
unsigned int mysql_num_fields(MYSQL_RES *result)
- result–保存到本地的结果集地址
- 返回值:结果集中每一条数据的列数;
8.遍历结果集——mysql_fetch_row
函数:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
- result–保存到本地的结果集地址
- 返回值:实际上是一个char **的指针,将每一条数据做成了字符串指针数组 row[0]-第0列 row[1]-第1列
- 并且这个接口会保存当前读取结果位置,每次获取的都是下一条数据
9.释放结果集——mysql_free_result
函数:
void mysql_free_result(MYSQL_RES *result)
- result–保存到本地的结果集地址
- /返回值:void
10.关闭数据库客户端连接,销毁句柄——mysql_close
函数:
void mysql_close(MYSQL *mysql)
11.获取mysql接口执行错误原因——mysql_error
函数:
const char *mysql_error(MYSQL *mysql)
创建测试用库和表
库名:test_db
表名:test_tb{
id(int)
age(int)
name(varcher32)
score(decimal(4,2))
}
create database if not exists test_db;
use test_db;
create table if not exists test_tb( id int primary key auto_increment, age int, name varchar(32), score decimal(4, 2)
);
使用API实现数据的增删改查操作
#include<iostream>
#include<mysql/mysql.h>
#include<string>
using namespace std;
int main()
{//1.操作句柄初始化,参数为空就动态申请句柄进行初始化MYSQL* mysql = mysql_init(NULL);if(mysql==NULL){cerr<<"init mysql handle failed"<<endl;return -1;}string host = "127.0.0.1";string user = "root";string passwd ="123456789.whC";string dp = "test_db";//2.链接数据库if( mysql_real_connect(mysql,host.c_str(),user.c_str(),passwd.c_str(),dp.c_str(),0,NULL,0)==NULL){cerr<<"mysql connect error "<<mysql_error(mysql)<<endl;return -1;}//3.设置字符集mysql_set_character_set(mysql,"utf8");//4.选择数据库int ret = mysql_select_db(mysql,"test_db");if(ret!=0){cerr<<"select db error"<<endl;}//增 // string sql = "insert into test_tb (age,name,score)values(18,'whc',12.33);"; // ret = mysql_query(mysql,sql.c_str());// if(ret!=0)// {// cerr<<"mysql query select error"<<endl;// }//改string sql1 ="update test_tb set age=100 where id=2;";ret = mysql_query(mysql,sql1.c_str());if(ret!=0){cerr<<"mysql query update error"<<endl;}string sql2 ="delete from test_tb where id =6;";//删// mysql_query(mysql,sql2.c_str());//查string sql3 ="select * from test_tb;";//执行语句ret = mysql_query(mysql,sql3.c_str());if(ret!=0){cerr<<"mysql query select error"<<endl;return -1;}//保存查询结果到本地MYSQL_RES* result = mysql_store_result(mysql);//获取结果集中的行数uint64_t row_nums = mysql_num_rows(result);//获取结果集中的列数unsigned int field_nums = mysql_num_fields(result);cout<<row_nums<<" "<<field_nums<<endl;//遍历结果集MYSQL_ROW row;for(int i = 0;i<row_nums;i++){row = mysql_fetch_row(result);for(int j = 0;j<field_nums;j++){cout<<row[j]<<" ";}cout<<endl;}//释放结果集mysql_free_result(result);//关闭数据库客户端连接,销毁句柄mysql_close(mysql);return 0;
}
相关文章:

第三方库认识- Mysql 数据库 API 认识
文章目录 一、msyql数据库API接口1.初始化mysql_init()——mysql_init2.链接数据库mysql_real_connect——mysql_real_connect3.设置当前客户端的字符集——mysql_set_character_set4.选择操作的数据库——mysql_select_db5.执行sql语句——mysql_query6.保存查询结果到本地——…...

Python兼职接单全攻略:掌握技能,拓宽收入渠道
引言 随着Python在数据处理、Web开发、自动化办公、爬虫技术等多个领域的广泛应用,越来越多的人开始利用Python技能进行兼职接单,以此拓宽收入渠道。本文将详细介绍Python兼职接单的注意事项、所需技能水平、常见单子类型、接单途径及平台,帮…...

一键编译并启动一个 ARM Linux qemu 虚拟机
需要事先自己编译 qemu-system-arm 可执行文件; 1,编译创建ARM 虚拟机 #!/usr/bin/bash sudo lssudo apt-get install gcc-arm-linux-gnueabi#wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gztar zxf linux-kernel-v5.10…...

KubeVirt虚拟机存储及网络卸载加速解决方案
1. 方案背景 1.1. KubeVirt介绍 随着云计算和容器技术的飞速发展,Kubernetes已成为业界公认的容器编排标准,为用户提供了强大、灵活且可扩展的平台来部署和管理各类应用。然而,在企业的实际应用中,仍有许多传统应用或遗留系统难…...

JVM—对象已死?
参考资料:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明 在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。 1、如何判…...

【前端面试3+1】20 css三栏布局6种实现方式、多行文本溢出怎么实现、token过期了怎么处理、【二叉树的中序遍历】
一、css三栏布局6种实现方式 1.浮动布局(Floats) .container {overflow: auto; /* 清除浮动 */ }.left, .right {width: 20%; /* 左右栏宽度 */float: left; }.middle {width: 60%; /* 中间栏宽度 */margin: 0 20%; /* 左右栏宽度 */ } 2.Flexbox .conta…...

【C++】vector介绍以及模拟实现(超级详细<=>源码并存)
欢迎来到我的Blog,点击关注哦💕 【C】vector介绍以及模拟实现 前言vector介绍 vector常见操作构造函数iteratorcapacitymodify vector模拟实现存储结构默认构造函数构造函数拷贝构造函数赋值运算符重载析构函数 容量(capacity)si…...

【Redis 进阶】主从复制(重点理解流程和原理)
在分布式系统中为了解决单点问题(某个服务器程序只有一个节点(只搞一个物理服务器来部署这个服务器程序)。可用性不高:如果这个机器挂了意味着服务就中断了;性能 / 支持的并发量比较有限)。通常会把数据复制…...

Git常用命
转自:https://blog.csdn.net/ahjxhy2010/article/details/80047553 1.查看某个文件或目录的修改历史 git log filename #查看fileName相关的commit记录 git log -p filenam # 显示每次提交的diff#只看某次提交中的某个文件变化,commit-id 文件名…...
强化学习时序差分算法之Q-learning算法——以悬崖漫步环境为例
0.简介 基于时序差分算法的强化学习算法除了Sarsa算法以外还有一种著名算法为Q-learning算法,为离线策略算法,与在线策略算法Sarsa算法相比,其时序差分更新方式变为 Q(St,At)←Q(St,At)α[Rt1γmaxaQ(St1,a)−Q(St,At)] 对于 Sarsa 来说&am…...

111推流111
推流推流...

刷题——数组中只出现一次的两个数字
数组中只出现一次的两个数字_牛客题霸_牛客网 描述 一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 数据范围:数组长度 2≤n≤10002≤n≤1000,数组中每个数的大小 0<val≤100000…...

《剖析程序员面试“八股文”:助力、阻力还是噱头?》
#“八股文”在实际工作中是助力、阻力还是空谈? 作为现在各类大中小企业面试程序员时的必问内容,“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢?有IT人士不禁发出疑问:程序员面试考…...

Redis过期key的删除策略
在 Redis 中,设置了过期时间的键在过期时间到达后,并不会立即从内存中删除。如果不是,那过期后到底什么时候被删除呢? 下面对这三种删除策略进行具体分析。 立即删除: 立即删除能够保证内存数据的及时性和空间的有效…...

软件管理
设备挂载在目录下才可以读 挂载类似于将u盘插在电脑上 mount /dev/sr0 /opt/openeuler/ vim /etc/rc.d/rc.local #开机自运行脚本,将挂载命令写入脚本,并给这个脚本执行权限 chmod x /etc/rc.d/rc.local [rootlocalhost ~]# cd /etc/yum.repos.d/ […...

【2024】Datawhale AI夏令营 Task3笔记——Baseline2部分代码解读及初步上分思路
【2024】Datawhale AI夏令营 Task3笔记——Baseline2部分代码解读及初步上分思路 本文对可完成赛事“逻辑推理赛道:复杂推理能力评估”初赛的Baseline2部分关键代码进行详细解读,介绍Baseline2涉及的关键技术和初步上分思路。 Baseline2代码由Datawhal…...

软件测试——测试分类(超超超齐全版)
为什么要对软件测试进行分类 软件测试是软件⽣命周期中的⼀个重要环节,具有较⾼的复杂性,对于软件测试,可以从不同的⻆度加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理测试的分类⽅法。…...

深入解析 Go 语言 GMP 模型:并发编程的核心机制
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:点击跳转到网站,对人工智能感兴趣的小伙伴可以点进去看看。 前言 本章是Go并发编程的起始篇章,在未来几篇文章中我们会…...

PHP中如何处理字符串
在PHP中,处理字符串是一项非常常见的任务,PHP提供了大量的内置函数来方便地处理字符串。以下是一些常用的字符串处理函数: strlen() - 返回字符串的长度。 php复制代码 $text "Hello, World!"; echo strlen($text); // 输出&…...

windows内存泄漏检查汇总
VLD(Visual Leak Detector) 下载 官方下载地址2.5 另一分支2.7 安装 点击运行安装...

yolo格式数据集之空中及地面拍摄道路病害检测7种数据集已划分好|可以直接使用|yolov5|v6|v7|v8|v9|v10通用
yolo格式数据集之空中及地面拍摄道路病害检测7种数据集已划分好|可以直接使用|yolov5|v6|v7|v8|v9|v10通用 本数据为空中及地面拍摄道路病害检测检测数据集,数据集数量如下: 总共有:33585张 训练集:6798张 验证集:3284张 测试集&a…...

[Meachines] [Easy] Mirai Raspberry树莓派默认用户登录+USB挂载文件读取
信息收集 IP AddressOpening Ports10.10.10.48TCP:22,53,80,1276,32400,32469 $ nmap -p- 10.10.10.48 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u3 (protocol 2.0) | ssh-hostkey: | 1024 aa:ef:5c:…...

从零开始安装Jupyter Notebook和Jupyter Lab图文教程
前言 随着人工智能热浪(机器学习、深度学习、卷积神经网络、强化学习、AGC以及大语言模型LLM, 真的是一浪又一浪)的兴起,小伙伴们Python学习的热情达到了空前的高度。当我20年前接触Python的时候,做梦也没有想到Python会发展得怎么…...

数据库魔法:SQL Server中自定义分区函数的奥秘
数据库魔法:SQL Server中自定义分区函数的奥秘 在SQL Server中,分区表是管理大型表和提高查询性能的强大工具。分区函数和分区方案允许你根据特定的规则将数据分散到不同的文件组中。本文将深入探讨如何在SQL Server中实现数据库的自定义分区函数&#…...

网页禁止移除水印
一般的话水印分为明水印和暗水印两种 明水印的话就是在视频canvas上面蒙上一个div(如我上篇文章) ,暗水印的话就是把文字通过技术嵌入到图像里。 具体实现的话可以使用MutationObserver API 来监视 DOM 的变化,特别是针对目标节…...

Node Red 与axios简易测试环境的搭建
为了学习在vue3中如何使用axios,我借Sider Fusion的帮助搭建了基于node的简易测试环境。 Axios 是一个基于 Promise 的 HTTP 客户端,通常用于浏览器环境,但它也可以在 Node.js 环境中使用。因此,可以在 Ubuntu 的 Bash 环境下通过…...

测试面试宝典(四十三)—— 接口测试流程
回答一: 接口测试一般遵循以下流程: 需求分析 仔细研究接口的需求文档,包括接口的功能、输入输出参数、业务逻辑、性能要求等。与开发人员、产品经理等沟通,确保对需求的理解准确无误。 测试计划制定 确定测试的目标、范围和策略。…...

arkhamintelligence 请求头加密 X-Payload 完整逆向分析+自动化解决方案
大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 逆向是爬虫工程师进阶必备技能,当我们遇到一个问题时可能会有多种解决途径,而如何做出最高效的抉择又需要经验的积累。本期文章将以实战的方式,带你详细地逆向分析 arkhamintelligence 请求头加密字段 X-Payload 的…...

Vue Router哈希模式和历史模式
Vue官方文档 哈希模式(hash mode) 特点 URL 格式:使用 # 符号分隔路径,哈希值之后的部分由客户端解析。 https://example.com/#/about无需服务器配置:哈希值部分不会被发送到服务器,因此不需要额外的服…...

Springboot实战:AI大模型+亮数据代理助力短视频时代
目录 前言1.如何入门亮数据1.1、注册登录1.2、注册账号1.3、登录1.4、购买静态住宅代理1.5、展示购买的代理 2. 使用Springboot、AI大模型构建系统2.1 使用Springboot、AI大模型构建爬虫2.2、在Springboot项目添加工具 3、编写代码,爬取视频素材3.1、代码里使用代理…...