MySQLclient库常用接口

2023-10-13 11:29:47 浏览数 (1)

目标:学会mysql提供给C语言代码操作数据库的接口的使用。

MYSQL API

1.初始化MySQL操作句柄。
代码语言:javascript复制
//Mysql操作句柄初始化
// 参数说明:
// mysql为空则动态申请句柄空间进⾏初始化
// 返回值: 成功返回句柄指针, 失败返回NULL
MYSQL * mysql_init(MYSQL * mysql);

如果参数填入NULL,那么就会自动生成句柄并进行初始化。

2.连接mysql服务器
代码语言:javascript复制
// 连接mysql服务器
// 参数说明:
// mysql--初始化完成的句柄
// host---连接的mysql服务器的地址
// user---连接的服务器的⽤⼾名
// passwd-连接的服务器的密码
// db ----默认选择的数据库名称
// port---连接的服务器的端⼝: 默认0是3306端⼝
// unix_socket---通信管道⽂件或者socket⽂件,通常置NULL
// client_flag---客⼾端标志位,通常置0
// 返回值:成功返回句柄指针,失败返回NULL
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 
  client_flag);
3.设置字符集
代码语言:javascript复制
// 设置当前客⼾端的字符集
// 参数说明:
// mysql--初始化完成的句柄
// csname--字符集名称,通常:"utf8"
// 返回值:成功返回0, 失败返回⾮0
int mysql_set_character_set(MYSQL * mysql, const char* csname)
4.选择操作的数据库
代码语言:javascript复制
// 选择操作的数据库
// 参数说明:
// mysql--初始化完成的句柄
// db-----要切换选择的数据库名称
// 返回值:成功返回0, 失败返回⾮0
int mysql_select_db(MYSQL *mysql, const char *db)
5.执行sql语句
代码语言:javascript复制
// 执⾏sql语句
// 参数说明
// mysql--初始化完成的句柄
// stmt_str--要执⾏的sql语句
// 返回值:成功返回0, 失败返回⾮0
int mysql_query(MYSQL* mysql, const char* stmt_str)
6.保存查询结果到本地
代码语言:javascript复制
// 保存查询结果到本地
// 参数说明:
// mysql--初始化完成的句柄
// 返回值:成功返回结果集的指针, 失败返回NULL
MYSQL_RES* mysql_store_result(MYSQL* mysql)
7.获取结果集中的行数 
代码语言:javascript复制
// 获取结果集中的行数
// 参数说明:
// result--保存到本地的结果集地址
// 返回值:结果集中数据的条数
uint64_t mysql_num_rows(MYSQL_RES* result);
 8.获取结果集中的列数
代码语言:javascript复制
// 获取结果集中的列数
// 参数说明:
// result--保存到本地的结果集地址
// 返回值:结果集中每⼀条数据的列数
unsigned int mysql_num_fields(MYSQL_RES* result)
9.遍历结果集 
代码语言:javascript复制
// 遍历结果集, 并且这个接⼝会保存当前读取结果位置,每次获取的都是下⼀条数据
// 参数说明:
// result--保存到本地的结果集地址
// 返回值:实际上是⼀个char **的指针,将每⼀条数据做成了字符串指针数组
// row[0]-第0列 row[1]-第1列 ...
MYSQL_ROW mysql_fetch_row(MYSQL_RES* result)
10.释放结果集 
代码语言:javascript复制
// 释放结果集
// 参数说明:
// result--保存到本地的结果集地址
void mysql_free_result(MYSQL_RES* result)
11.关闭数据库客⼾端连接,销毁句柄 
代码语言:javascript复制
// 关闭数据库客⼾端连接,销毁句柄
// 参数说明:
// mysql--初始化完成的句柄
void mysql_close(MYSQL* mysql)
12.获取mysql接口执行错误原因 
代码语言:javascript复制
// 获取mysql接口执行错误原因
// 参数说明:
// mysql--初始化完成的句柄
const char* mysql_error(MYSQL* mysql)

示例代码:

代码语言:javascript复制
#include <stdio.h>
#include <string.h>
#include <mysql/mysql.h>

//定义连接数据库所需要的数据的宏
#define HOST "127.0.0.1"
#define PORT 3306
#define USER "root"
#define PASSWORLD ""
#define DBNAME "gobang"

int main()
{
    //1. 初始化MySQL句柄
    //MYSQL *mysql_init(MYSQL *mysql);
    MYSQL *mysql = mysql_init(NULL);
    if(mysql==NULL)
    {
        printf("mysql init failed!n");
    }

    //2. 连接服务器
    //MYSQL *mysql_real_connect(mysql,host,user,pass,dbname,port,unix_socket,flag)
    if(mysql_real_connect(mysql,HOST,USER,PASSWORLD,DBNAME,PORT,NULL,0)==NULL)
    {
        printf("connect mysql server failed :%sn",mysql_error(mysql));
        mysql_close(mysql);
        return -1;
    }

    //3.设置客户端字符集
    //int mysql_set_character_set(mysql,"utf8");
    if(mysql_set_character_set(mysql,"utf8")!=0)
    {
        printf("set client character failed :%sn",mysql_error(mysql));
        mysql_close(mysql);
        return -1;
    }

    //4.选择要操作的数据库
    //int mysql_select_db(mysql,dbname);
    /*数据的选择已经在连接MySQL服务器的时候选择了*/

    //5.执行sql语句
    //int mysql_query(MYSQL *mysql,char *sql);
    //插入一条数据
    //char *sql = "insert stu values(null,'小红',20,90,78,100);";
    //修改数据
    //char *sql = "update stu set ch=ch 40 where sn=1;";
    //删除
    //char *sql = "delete from stu where sn=1;";
    //查询
    char *sql = "select * from stu;";
    int ret = mysql_query(mysql,sql);
    if(ret!=0)
    {
        printf("%sn",sql);
        printf("mysql query failed :%sn",mysql_error(mysql));
        mysql_close(mysql);
        return -1;
    }

    //6.如果sql语句是查询语句,则需要保存结果到本地结果集
    //MYSQL_RES *mysql_store_result(MYSQL *mysql);
    MYSQL_RES *res = mysql_store_result(mysql);//结果集
    if(res==NULL)
    {       
        mysql_close(mysql);
        return -1;
    }
    //7.获取结果集中的结果条数
    //int mysql_num_rows(MYSQL_RES *res);//行数
    //int mysql_num_fields(MYSQL_RES *res);//列数
    int num_row = mysql_num_rows(res);
    int num_col = mysql_num_fields(res);
    //8.遍历保存到本地的结果集
    for(int i = 0;i<num_row;  i)
    {
        MYSQL_ROW row = mysql_fetch_row(res);
        for(int j = 0;j<num_col;  j)
        {
            printf("%st",row[j]);
        }
        printf("n");
    }
    //9.释放结果集
    mysql_free_result(res);
    //10.关闭连接,释放句柄
    mysql_close(mysql);

    return 0;
}

0 人点赞