第三方库认识- Mysql 数据库 API 认识

news2024/9/22 21:32:37

文章目录

  • 一、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;
}

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

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

相关文章

配置frp实现内网穿透(.toml配置文件)

简介 frp 是一款高性能的反向代理应用&#xff0c;专注于内网穿透。它支持多种协议&#xff0c;包括 TCP、UDP、HTTP、HTTPS 等&#xff0c;并且具备 P2P 通信功能。使用 frp&#xff0c;您可以安全、便捷地将内网服务暴露到公网&#xff0c;通过拥有公网 IP 的节点进行中转。…

软件测试---禅道

一、禅道简介 二、安装 三、新手引导 &#xff08;1&#xff09;在系统创建一个新的用户帐号&#xff1a; &#xff08;2&#xff09;在系统创建一个新的项目集&#xff1a; &#xff08;3&#xff09;在系统创建一个新的产品&#xff1a; &#xff08;4&#xff09;在系统创…

【AI学习】[2024北京智源大会]具身智能:面向通用机器人的具身多模态大模型系统

面向通用机器人的具身多模态大模型系统 王 鹤 | 北京大学助理教授&#xff0c;智源学者 边听边做一些记录 一、通用机器人的概念和发展趋势&#xff0c;以及实现通用机器人的基石层、大脑和小脑模型等方面的思考和探索。 主要观点&#xff1a;人形机器人&#xff0c;是未来…

基于SpringBoot+Vue的校园便利平台(带1w+文档)

基于SpringBootVue的校园便利平台(带1w文档) 基于SpringBootVue的校园便利平台(带1w文档) 本平台采用B/S架构、采用的数据库是MySQL&#xff0c;使用JAVA技术开发。该平台的开发方式无论在国内还是国外都比较常见&#xff0c;而且开发完成后使用普遍&#xff0c;可以给平台用户…

多址技术(FDMA,TDMA,CDMA,帧,时隙)(通俗易懂)

多址技术是一种区分用户的技术。 举个例子&#xff0c;一个基站发出信息&#xff0c;如何确定是发给谁的&#xff1f; 这个技术就是解决这个问题的。 多址技术常见的有三种&#xff1a; 频分多址&#xff08;FDMA&#xff09;、时分多址&#xff08;TDMA&#xff09;、码分…

程序员学长 | 快速学习一个算法,UNet

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学习一个算法&#xff0c;UNet 今天给大家分享一个超强的算法模型&#xff0c;UNet UNet 是一种卷积神经网络架构&#xff0c;最初由 Olaf Ronne…

快速排序(下)

快速排序&#xff08;下&#xff09; 前言 在上一篇文章中我们了解了快速排序算法&#xff0c;但那是Hoare的版本&#xff0c;其实还有别的版本&#xff1a;一种是挖坑法&#xff0c;它们的区别主要在于如何找基准值。霍尔的版本思路难理解但代码好理解&#xff0c;挖坑法则是…

Java新特性(二) Stream与Optional详解

Java8新特性&#xff08;二&#xff09; Stream与Optional详解 一. Stream流 1. Stream概述 1.1 基本概念 Stream&#xff08;java.util.stream&#xff09; 是Java 8中新增的一种抽象流式接口&#xff0c;主要用于配合Lambda表达式提高批量数据的计算和处理效率。Stream不是…

【前端】中后台框架 添加其他布局的探索

文章目录 前言需求整理第一步&#xff1a;实现可切换布局第二步&#xff1a;配置页面顶部的路由&#xff08;一级路由&#xff09;第三部&#xff1a;配置左侧二级和二级以上的路由第四部&#xff1a;给侧边栏加一个动画第五部&#xff1a;刷新页面之后顶部路由、左侧路由的回显…

5款免费写作生成软件,自动生成原创文章很简单

在人工智能时代的今天&#xff0c;创作者面对写作不再是一件令人望而生畏的事情。随着AI技术的不断发展&#xff0c;涌现出了许多优秀的免费写作生成软件&#xff0c;让自动生成原创文章变得轻松简单。以下为大家详细介绍5款备受赞誉的免费写作生成软件&#xff0c;下面跟随小编…

硬盘数据丢失不再怕,四大恢复工具帮你轻松逆转局面!

硬盘故障、误删文件、病毒攻击等原因导致数据丢失的情况时有发生。面对这种情况&#xff0c;如何高效、快速地进行硬盘数据恢复呢&#xff1f;接下来几款好用的数据恢复软件推荐给大家。 一、福昕数据恢复&#xff1a;全方位恢复&#xff0c;让数据无遗漏 链接&#xff1a;ww…

手把手教你OpenCV实现实时人脸检测(C++)

目录 1&#xff0c;原理介绍 2&#xff0c;代码讲解 3&#xff0c;全部代码 4&#xff0c;结果展示 1&#xff0c;原理介绍 haarcascade_frontalface_default.xml 是一个 XML 文件&#xff0c;它包含了使用 Haar 特征分类器训练得到的人脸检测模型。这个模型是 OpenCV 库自…

【小知识】站在前人的肩膀上写程序——STL库初阶算法函数的使用

【小知识】站在前人的肩膀上写程序——STL库初阶算法函数的使用 1.墨水瓶算法和swap函数2.打擂台算法和max&#xff0c;min函数3.排序——sort函数 1.墨水瓶算法和swap函数 如果想交换两个墨水瓶的墨水该怎么办呢&#xff1f;我们可以准备第三个墨水瓶。将第一个墨水瓶的墨水倒…

linux安装配置jdk

①下载jdk安装包&#xff0c;放在/opt/app/software/java下 cd /opt/app/software/java②进行解压操作 tar -zxvf jdk-8u251-linux-x64.tar.gz③解压完成之后&#xff0c;进行环境变量的配置&#xff0c;shell下执行 vi ~/.bash_profile根据jdk的安装目录&#xff0c;加入 …

LeeCode Practice Journal | Day31_GA05

56. 合并区间 题目&#xff1a;56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a;代码随想录 (programmercarl.com) 思路很清晰&#xff0c;对数组的操作稀烂&#xff0c;细节上也出现很多问题 solution public class Solution {public int[][] Merge(in…

2024全新Thinkphp聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能/全开源运营版本

全开源运营版本聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能 运营版本的聊天室&#xff0c;可以添加好友&#xff0c;建立群组&#xff0c;私聊&#xff0c;禁言功能 H5TP5.0mysqlPHP 源码开源不加密

【python】Python二手房住房数据抓取可视化(源码+数据集+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

python爬取豆瓣电影top250-python实战项目,手把手教学,附源码

目录 1、分析网页2、请求服务器 2.1导入包2.2设置浏览器代理2.3请求服务器格式2.4请求服务器代码汇总 3.xpath提取信息 3.1获取xpath节点的方法3.2xpath提取内容3.2.1提取文本3.2.2提取链接3.2.3提取标签元素 4.正则表达式 4.1提取固定位置的信息4.2匹配出数字 5、提取一页中的…

Java 并发编程:Java 线程池的介绍与使用

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 024 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

细分 Insight 合作伙伴 2024 年企业技术状况报告

Insight Partners 的团队刚刚发布了 2024 年企业技术状况报告。在 60 幻灯片中有很多东西可以消耗&#xff0c;但我们挑选了应该让我们的观众感兴趣的东西 - 坦率地说&#xff0c;有很多有趣的东西。我将把调查方法的东西留给你使用&#xff0c;但足以说样本量很大&#xff0c;…