• 数据库_之常用API的使用


    数据库_之电商API


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


    MySQL的常用API

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

    • mysql_init()

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

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

    • mysql_options()

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

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

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

    • mysql_real_connect()

      1. //函数原型
      2. MYSQL *STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
      3.                                   const char *user, const char *passwd,
      4.                                   const char *db, unsigned int port,
      5.                                   const char *unix_socket,
      6.                                   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()

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

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

    • mysql_store_result()

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

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

    • mysql_use_result()

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

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

    • mysql_fetch_row()

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

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

    • mysql_free_result()

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

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

    • mysql_error()

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

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

    • mysql_close()

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

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


    MySQL的API应用

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

    图片

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

    1. #pragma once
    2. #define _CRT_SECURE_NO_WARNINGS
    3. #include 
    4. #include 
    5. #include 
    6. #include 
    7. #include 
    8. #include 
    9. #pragma comment(lib,"libmysql.lib")
    • 定义一个管理类:CManager

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

    CManager.h

    1. #pragma once
    2. #include "define.h"
    3. #include "CWorker.h"
    4. #include "CAdmin.h"
    5. class CManager
    6. {
    7.  MYSQL m_sql;
    8.  CWorker m_work;
    9.  CAdmin m_admin;
    10.  int Menu();
    11.  bool ConnectDB();
    12. public:
    13.  int Main();
    14.  static void PrintError(std::string sPromp)
    15.  {
    16.   auto & sql = getInstance().m_sql;
    17.   std::cout << sPromp << "(" << mysql_errno(&sql) << "):" 
    18.    << mysql_error(&sql) << std::endl;
    19.   system("pause");
    20.  }
    21.  static CManager& getInstance()
    22.  {
    23.   static CManager m;
    24.   return m;
    25.  }
    26.  CManager() : m_admin(m_sql),m_work(m_sql)
    27.  {
    28.  }
    29. };

    CManager.cpp

    1. #include "CManager.h"
    2. using namespace std;
    3. int CManager::Menu()
    4. {
    5.  system("cls");
    6.  const char* sPrior = m_admin.GetPrior() ? "普通" : "高级";
    7.  cout << "\n\n\t\t当前用户:" << m_admin.GetUser() << "【" << sPrior << "】" << endl;
    8.  puts("\t\t********************************");
    9.  puts("\t\t*\t1、浏览所有信息        *");
    10.  puts("\t\t*\t2、添加信息            *");
    11.  puts("\t\t*\t3、删除信息            *");
    12.  puts("\t\t*\t4、修改信息            *");
    13.  puts("\t\t*\t5、查找信息            *");
    14.  if (m_admin.GetPrior())
    15.   puts("\t\t*\t6、密码修改            *");
    16.  else
    17.   puts("\t\t*\t6、管理账号            *");
    18.  puts("\t\t*\t0、退出                *");
    19.  puts("\t\t********************************");
    20.  cout << "\t\t请选择:";
    21.  int i = 0;
    22.  cin >> i;
    23.  switch (i)
  • 相关阅读:
    href=“#“与href=“javascript:void(0)“的区别
    含文档+PPT+源码等]精品基于NET实现的旅游景点推荐系统[包运行成功]计算机毕业设计NET毕业设计项目源码
    硬技能之上的软技巧(一)
    前端学习笔记
    修改Ubuntu对CPU,socket,进程,文件数等的限制
    基于SSM在线纳新系统毕业设计-附源码241540
    leetcode:55. 跳跃游戏【经典贪心】
    【可观测性系列】 OpenTelemetry Collector的部署模式分析
    【秋招面经搬运】字节一面
    1.centos7 安装显卡驱动、cuda、cudnn
  • 原文地址:https://blog.csdn.net/2301_79478575/article/details/132802412