当前位置: 首页 > news >正文

数据库_之常用API的使用

数据库_之电商API


MySQL C API 使用(基本函数)
Mysql C API函数详解


MySQL的常用API

一个常用的程序调用MySQL数据库的时候通常都会调用以下API,下面来逐个分析.

  • mysql_init()

    //函数原型
    MYSQL *STDCALL mysql_init(MYSQL *mysql);
    

    这个API主要是用来分配或初始化一个MySQL对象,用来连接MySQL服务端; 返回值是MYSQL *; 参数MYSQL *mysql是指定一个MYSQL对象.

  • mysql_options()

    //函数原型
    int STDCALL mysql_options(MYSQL *mysql, enum mysql_option option,const void *arg);
    

    API可用于设置额外的连接选项,并影响连接的行为.本函数可多次调用来设置数个选项; 参数MYSQL *mysql是指定一个MYSQL对象; 参数enum mysql_option option是供调用者选择填写的连接选项; 参数const void *arg是结合上一个参数填写的连接选项的值.

    关于连接选项的填写,可以参考 mysql_options()函数

  • mysql_real_connect()

    //函数原型
    MYSQL *STDCALL 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 clientflag);
    

    这个API主要是用来分配或初始化一个MySQL对象,用来连接MySQL服务端. 参数MYSQL *mysql是指定一个MYSQL对象,此处为mysql_init函数返回的指针; 参数const char *host指定主机地址; 参数const char *user指定mysql用户名; 参数const char *passwd输入该用户名的密码; 参数const char *db指定数据库,当该值为空时链接到默认的数据库; 参数unsigned int port指定端口; 参数const char *unix_socket指定使用unix链接方式,为空时表明不适用socket或管道机制; 参数unsigned long clientflag通常设置为0.

  • mysql_query()

    //函数原型
    int STDCALL mysql_query(MYSQL *mysql, const char *q);
    

    API是最常用的,增删查改都使用到它,query英文意思是查询,但这里表示执行. 参数MYSQL *mysql是指定一个MYSQL对象. 参数const char *输入一个SQL语句.

  • mysql_store_result()

    //函数原型
    MYSQL_RES *STDCALL mysql_store_result(MYSQL *mysql);
    

    获取结果集,通常是搭配mysql_query这个API来使用,查询上一条SQL语句返回的结果. 参数MYSQL *mysql是指定一个MYSQL对象 返回值MYSQL_RES是一个句柄,可以使用mysql_fetch_row取出这个结果集里头有多少行数据.

  • mysql_use_result()

    //函数原型
    MYSQL_RES *STDCALL mysql_use_result(MYSQL *mysql);
    

    这个API是在调用一个可以产生结果集的命令之后,搭配本函数使用获取该结果集; 参数MYSQL *mysql是指定一个MYSQL对象.

  • mysql_fetch_row()

    //函数原型
    MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
    

    结合mysql_store_result这个API来使用,获取每一行的内容. 参数MYSQL_RES *result是通过mysql_use_result获取到的返回值.

  • mysql_free_result()

    //函数原型
    void STDCALL mysql_free_result(MYSQL_RES *result);
    

    操作完结果集之后.一定要调用本函数来释放内存; 参数MYSQL_RES *result是通过mysql_use_result获取到的返回值.

  • mysql_error()

    //函数原型
    const char *STDCALL mysql_error(MYSQL *mysql);
    

    函数返回值是const char*类型,主要是返回最近调用mysql函数发生了哪些错误信息 参数MYSQL *mysql是指定一个MYSQL对象

  • mysql_close()

    //函数原型
    void STDCALL mysql_close(MYSQL *sock);
    

    mysql_close()是每个调用数据库连接的程序在最后阶段都必须要调用的, 很明显它的功能是用来关闭一个MySQL服务端的连接. 参数MYSQL *mysql是指定一个MYSQL对象


MySQL的API应用

下面使用一个比较实际的例子,用这些API写一个简单的单机版数据库管理软件.
本地数据库新建好两个表并存入部分初始信息:

图片

  • 先定义好包含文件:define.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <mysql.h>
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <assert.h>
#pragma comment(lib,"libmysql.lib")
  • 定义一个管理类:CManager

    提供主菜单的显示,连接数据库和打印错误的功能.

CManager.h

#pragma once
#include "define.h"
#include "CWorker.h"
#include "CAdmin.h"
class CManager
{MYSQL m_sql;CWorker m_work;CAdmin m_admin;int Menu();bool ConnectDB();
public:int Main();static void PrintError(std::string sPromp){auto & sql = getInstance().m_sql;std::cout << sPromp << "(" << mysql_errno(&sql) << "):" << mysql_error(&sql) << std::endl;system("pause");}static CManager& getInstance(){static CManager m;return m;}CManager() : m_admin(m_sql),m_work(m_sql){}
};

CManager.cpp

#include "CManager.h"
using namespace std;
int CManager::Menu()
{system("cls");const char* sPrior = m_admin.GetPrior() ? "普通" : "高级";cout << "\n\n\t\t当前用户:" << m_admin.GetUser() << "【" << sPrior << "】" << endl;puts("\t\t********************************");puts("\t\t*\t1、浏览所有信息        *");puts("\t\t*\t2、添加信息            *");puts("\t\t*\t3、删除信息            *");puts("\t\t*\t4、修改信息            *");puts("\t\t*\t5、查找信息            *");if (m_admin.GetPrior())puts("\t\t*\t6、密码修改            *");elseputs("\t\t*\t6、管理账号            *");puts("\t\t*\t0、退出                *");puts("\t\t********************************");cout << "\t\t请选择:";int i = 0;cin >> i;switch (i)

相关文章:

数据库_之常用API的使用

数据库_之电商API MySQL C API 使用&#xff08;基本函数&#xff09; Mysql C API函数详解 MySQL的常用API 一个常用的程序调用MySQL数据库的时候通常都会调用以下API,下面来逐个分析. mysql_init() //函数原型 MYSQL *STDCALL mysql_init(MYSQL *mysql);这个API主要是用来分…...

CTreeCtrl自绘

CSWTreeCtrl.h&#xff09; #pragma once#define _OWNER_DRAWN_TREE // 自绘CTreeCtrl&#xff0c;可支持背景图片显示功能class CSWTreeCtrl : public CTreeCtrl {DECLARE_DYNAMIC(CSWTreeCtrl)// 成员私有结构定义// 构造/析构函数 public:CSWTreeCtrl();virtual ~CSWTreeC…...

目标检测YOLO实战应用案例100讲-基于深度学习的可见光遥感图像目标检测

目录 前言 遥感图像目标的特点 基于深度学习的目标检测技术 2.1引言 2.2卷积神经网络...

MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择

目录 存储引擎特点 InnoDB 介绍 特点 文件 逻辑存储结构 MyISAM 介绍 特点 文件 Memory 介绍 特点 文件 区别及特点 存储引擎选择 存储引擎特点 上面我们介绍了什么是存储引擎&#xff0c;以及如何在建表时如何指定存储引擎&#xff0c;接下来我们就来介绍比较…...

【Vue】构建vue项目的几种方法以及区别

【Vue】构建vue项目的几种方法以及区别 1.通过vue-cli进行创建2.直接通过npm进行创建3.基于vite创建vue项目4.总结 构建vue项目时请确保已经安装node和npm 1.通过vue-cli进行创建 要用vue脚手架vue-cli创建vue项目首先我们需要全局安装一下vue-cli&#xff0c;安装命令如下&a…...

动态封装对象,属性来自json

需求&#xff1a; 如何动态的获取一个对象的字段&#xff0c;假如一个对象里面有name,age&#xff0c;sex三个字段&#xff0c;我想取name的值&#xff0c;这个name是存在一个json中&#xff0c;json的格式如下[{"key":"name"},{"key":"age…...

【LeetCode-中等题】90. 子集 II

文章目录 组合并集问题汇总&#xff1a;题目方法一&#xff1a;递归加回溯&#xff08;去重版&#xff09; 组合并集问题汇总&#xff1a; 1、子集非去重版本 2、组合非去重版本 3、组合去重版本 题目 本题nums数组存在重复元素&#xff0c;所以本题会涉及一个去重操作&#…...

Docker如何安装seafile

SQLite 方式 要在 Docker 中安装 Seafile&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装 Docker&#xff1a;确保您的系统上已经安装了 Docker。您可以根据您的操作系统类型&#xff0c;在官方网站上找到适合您系统的 Docker 版本并进行安装。 下载 Seafile 镜像&…...

注册法国商标的步骤和时间

注册法国商标的步骤如下&#xff1a; 1、商标查询&#xff1a;在提交申请之前&#xff0c;建议进行商标查询&#xff0c;以确保商标在法国市场上具有独特性和显著性。 2、提交申请&#xff1a;通过法国知识产权局的在线平台提交商标申请。申请时&#xff0c;需要提供以下文件…...

一起学数据结构(6)——栈和队列

上篇文章中&#xff0c;对栈的概念及特点进行了解释&#xff0c;并且给出了栈实现的具体代码。本篇文章将给出队列的基本概念及特点。并给出相应的代码。 1. 队列的概念及结构&#xff1a; 在给出队列的概念之前&#xff0c;先给出上篇文章中提到的栈的概念&#xff1a;一种只…...

【数据结构】二叉树的顺序结构-堆

【数据结构】二叉树的顺序结构-堆 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储&#xff0c;需要注意的是这里的堆和操作系统虚拟进程地址空间…...

2024年java面试--mysql(2)

系列文章目录 2024年java面试&#xff08;一&#xff09;–spring篇2024年java面试&#xff08;二&#xff09;–spring篇2024年java面试&#xff08;三&#xff09;–spring篇2024年java面试&#xff08;四&#xff09;–spring篇2024年java面试–集合篇2024年java面试–redi…...

IllegalArgumentException

Caused by: java.lang.IllegalArgumentException:Invalid pulsar service : persistent 参数非法异常 这个异常是由于使用了无效的 Pulsar 服务类型导致的。Pulsar 支持不同的服务类型&#xff0c;例如 persistent、non-persistent 等。 当你在配置 Pulsar 相关的参数时&…...

Git 概述命令、idea中的使用

目录 Git概述 Git代码托管服务 Git常用命令 Git 全局设置 获取 Git 仓库 ​编辑Git 工作区中文件的状态 本地仓库操作 远程仓库操作 ​编辑分支操作 标签操作 在IDEA中使用Git 1.获取Git仓库 .gitignore 表示忽略 2.本地仓库操作 3.远程仓库操作 4.分支操作 Git是…...

单片机之硬件记录

一、概念 VBAT 当使用电池或其他电源连接到VBAT脚上时&#xff0c;当VDD断电时&#xff0c;可以保存备份寄存器的内容和维持RTC的功能。如果应用中没有使用外部电池&#xff0c;VBAT引脚应接到VDD引脚上。 VCC&#xff1a;Ccircuit 表示电路的意思,即接入电路的电压&#x…...

QQ文件传输协议研究

引言 我们都知道,现在越来越多的应用采取了 HTTPS or TLS 传输协议,对于一般的协议,我们可以使用中间人技术对流量进行劫持转发,从而破解密文,这边可以参见我的另外一篇文章基于加密邮件协议的中间人攻防实战, 而对于 HTTPS 应用即使是我们采取中间人技术,也很难让浏览器…...

Qt/C++音视频开发51-推流到各种流媒体服务程序

一、前言 最近将推流程序完善了很多功能,尤其是增加了对多种流媒体服务程序的支持,目前支持mediamtx、LiveQing、EasyDarwin、nginx-rtmp、ZLMediaKit、srs、ABLMediaServer等,其中经过大量的对比测试,个人比较建议使用mediamtx和ZLMediaKit,因为这两者支持的格式众多,不…...

LeetCode 35. 搜索插入位置

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 该题我们可以采用二分查找的方式&#xff0c;我们可以把数组分为&#xff0c;小于target的一边儿和大于等于target的一边儿。 当midleft(right-left)下标所对应的数大于等于targ…...

7年经验之谈 —— Web测试是什么,有何特点?

Web测试是指对Web应用程序进行验证和评估的过程&#xff0c;以确保其功能、性能和安全性符合预期。 Web测试具体包括以下几个方面的内容&#xff1a; 功能测试&#xff1a;验证Web应用程序是否按照需求规格说明书中定义的功能正常工作。功能测试包括输入验证、表单提交、页面…...

【数据结构】前言概况 - 树

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;数据结构 &#x1f525;该文章针对树形结构作出前言&#xff0c;以保证可以对树初步认知。 目录&#xff1a; &#x1f30d;前言:&#x1f3…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...