数据库_之常用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、密码修改            *");
 else
  puts("\t\t*\t6、管理账号            *");

 puts("\t\t*\t0、退出                *");
 puts("\t\t********************************");
 cout << "\t\t请选择:";
 int i = 0;
 cin >> i;

 switch (i)
相关推荐
金牌归来发现妻女流落街头3 分钟前
【从SpringBoot到SpringCloud】
java·spring boot·spring cloud
毅炼3 分钟前
Java 基础常见问题总结(4)
java·后端
crmscs12 分钟前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob14 分钟前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
GR23423415 分钟前
2025年影视仓TV+手机官方版 内置地址源支持高清直播
java·智能手机·软件
机建狂魔19 分钟前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei99619 分钟前
flutter和Android动画的对比
android·flutter·动画
王老师青少年编程34 分钟前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)
c++·题解·真题·csp·信奥赛·csp-s·提高组
程序员清风38 分钟前
北京回长沙了,简单谈谈感受!
java·后端·面试
何中应1 小时前
请求头设置没有生效
java·后端