一.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函数,可以说是非常之多,如果大家想要更加深入学习,可以参考源码,进行下一步扩展,最后,感谢大家的支持!!!