Mysql接口API函数

一.API了解

        用专业的话来说是:Application Programming Interface,应用程序编程接口,但是我们简单理解为:为了方便用户调用计算机底层实现的接口,提升效率。

        假设我们现在想要在显示器上输出“hello world”,我们利用C语言的printf,或C++的cout,但是为什么通过他们就可以直接调用显示屏呢?要知道显示屏可只受操作系统控制,这便是API的体现,程序员通过对API函数的封装,从而使语言层面的函数可以调用操作系统相关的操作,并且屏蔽了大量底层细节,使用户使用大大方便。

        简单类比,API是一个窗口,连接上层和下层。当上层的调用涉及到API中的相关函数时,API就可以来反馈给操作系统,从而调用底层硬件,大家可以去学习下计算机组成原理机就会更加明白,API知识就讲到这吧!



二.MysqlAPI接口

        现在我们已经简单知道了API是什么?那么我们就通过mysqlAPI来认识一部分相关接口吧!

        MysqlAPI是对数据库相关调用的接口,下面我们一一来认识:

1.mysql_init:

MYSQL* mysql_init(MYSQL* mysql);
//作用:初始化MYSQL变量(结构)

如果参数为nullptr,该函数将分配、初始化、并返回新对象,相当于创建了一个MYSQL句柄,mysql结构体内容未初始化,需要对应关闭,否则初始化传递的对象返回其地址

2.mysql_real_connect:

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 clientflag);
//作用:以user用户连接到db数据库

相关参数了解:

mysql:MYSQL句柄变量

host:服务器地址,localhost/null表示本地主机

user:mysql数据库中相关用户,“”/null表示当前用户

password:user密码

db:要连接的数据库,null表示使用默认数据库

port:连接端口

unix_socket:unix连接方式,通常为null

clientflag:Mysql运行为ODBC数据库的标记,一般取0

3.mysql_query:

int mysql_query(MYSQL *mysql, const char *q);
//作用:查询数据库中某表的内容
//返回值为0表示查询成功,非0表示失败

q指的是对应的SQL语句字符串

4.mysql_real_query:

int mysql_real_query(MYSQL *mysql, const char *q,
     unsigned long length);
//作用:mysql_query()不能用于包含二进制数据的查询,使用mysql_real_query()取而代之(二进制数据可能包含字符‘\0’,mysql_query()会将该字符解释为查询字符串结束)

参数:

        mysql:前面定义的MYSQL变量;

        q:SQL查询语句;

        length:查询语句的长度

5.mysql_set_character_set

int mysql_set_character_set(MYSQL *mysql, const char *csname);
//作用:设定字符集,例如utf8

csname:传递字符集类型字符串,例如:utf8

6.mysql_store_result

MYSQL_RES * mysql_store_result(MYSQL *mysql);
//作用:将mysql_query()查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中

关于MYSQL_RES:

其本质是一个结构体,内部如下:

typedef struct st_mysql_res {
  my_ulonglong row_count;
  MYSQL_FIELD *fields;
  MYSQL_DATA *data;
  MYSQL_ROWS *data_cursor;
  unsigned long *lengths;
  MYSQL *handle;
  const struct st_mysql_methods *methods;
  MYSQL_ROW row;
  MYSQL_ROW current_row;
  MEM_ROOT field_alloc;
  unsigned int field_count, current_field;
  my_bool eof;
  my_bool unbuffered_fetch_cancelled;
  void *extension;
} MYSQL_RES;

内部存在多个变量,存取数据库中读取的数据,便于用户使用

7.mysql_use_result

MYSQL_RES * mysql_use_result(MYSQL *mysql);
//初始化逐行的结果集检索

mysql_use_result是通过一行一行的读取,并且未与数据库绑定,但是会阻碍其他进程,所以我们需要每行都读取,所以我们更习惯用mysql_store_result

8.mysql_field_count:

unsigned int mysql_field_count(MYSQL *mysql);
//作用:读取并返回表的列数

9.mysql_free_result

void mysql_free_result(MYSQL_RES *result);
//作用:释放结果集使用的内存

如果为结果集分陪过内存,必须要保证内存的释放!!!

10.mysql_close

void mysql_close(MYSQL *sock);
//释放mysql连接,即释放mysql权柄

类比于文件fopen和fclose关系,mysql_init与mysql_close必须一起使用

本文借鉴了如下文章(非常感谢)

Mysql接口API相关函数详细使用说明——mysql_init,mysql_real_connect,mysql_query,mysql_close等相关-CSDN博客

关于mysqlAPI函数,可以说是非常之多,如果大家想要更加深入学习,可以参考源码,进行下一步扩展,最后,感谢大家的支持!!!

猜你喜欢

转载自blog.csdn.net/2301_79813267/article/details/142864879