第三方库认识- 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 安装 点击运行安装...
观察Taotoken Token Plan套餐在长期项目中的成本控制效果
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken Token Plan套餐在长期项目中的成本控制效果 对于需要长期、稳定调用大模型API的项目而言,成本的可预测性…...
词达人自动化工具:如何用智能技术将30分钟学习任务压缩到3分钟完成?
词达人自动化工具:如何用智能技术将30分钟学习任务压缩到3分钟完成? 【免费下载链接】cdr 微信词达人,高正确率,高效简洁。支持班级任务及自选任务 项目地址: https://gitcode.com/gh_mirrors/cd/cdr 在当今数字化教育环境…...
OpenClaw工具如何快速配置接入Taotoken平台
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 OpenClaw工具如何快速配置接入Taotoken平台 对于使用OpenClaw这类智能体(Agent)工具的开发者而言ÿ…...
Windows APK安装工具终极指南:轻松在电脑上安装Android应用
Windows APK安装工具终极指南:轻松在电脑上安装Android应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 您是否曾经希望在Windows电脑上直接安装Android…...
AI智能体构建实战:从架构设计到工程落地的关键挑战与解决方案
1. 项目概述:揭开AI智能体构建的隐秘面纱 “构建AI智能体”,这听起来像是当下最酷、最前沿的技术话题。无论是科技新闻还是行业论坛,你都能看到无数关于智能体如何自动化工作流、理解复杂指令、甚至自主决策的激动人心的讨论。然而࿰…...
无线充电技术解析:从Qi标准到射频远距充电的现状与未来
1. 无线充电的现状与用户困境作为一名长期关注消费电子与网络通信设备的技术博主,我每天打交道最多的就是各种“电老虎”和“充电宝”。Rebecca Day在文章里描述的那个圣诞场景,我简直不能再熟悉了——在一堆新设备的包装盒里翻找线缆,在抽屉…...
3分钟搞定TrollStore:iOS 14-16.6.1一键安装终极指南
3分钟搞定TrollStore:iOS 14-16.6.1一键安装终极指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾为在iOS设备上安装TrollStore而烦恼࿱…...
别再搞混了!Web地图开发必懂的EPSG:4326和EPSG:3857(附JavaScript转换代码)
Web地图开发中的坐标系解密:从原理到实战 第一次在Leaflet地图上叠加GPS轨迹数据时,我盯着那个偏离了三条街的路径百思不得其解——经纬度坐标明明正确,为什么显示位置完全不对?这个困扰无数Web开发者的经典问题,根源在…...
如何用Rye与Docker打造无缝Python容器开发环境:完整实践指南
如何用Rye与Docker打造无缝Python容器开发环境:完整实践指南 【免费下载链接】rye a Hassle-Free Python Experience 项目地址: https://gitcode.com/gh_mirrors/ry/rye Rye是一款旨在提供无忧Python开发体验(a Hassle-Free Python Experience&am…...
从服务器到手机:手把手教你修改游戏客户端IP,让私服在手机上跑起来
移动游戏私服客户端IP修改实战指南 当你在服务器上成功部署了游戏私服后,最令人沮丧的莫过于发现手机上的官方客户端无法连接到你的私人服务器。这个看似简单的"最后一公里"问题,往往成为许多私服搭建者的拦路虎。本文将彻底解决这个痛点&…...
