MySQLclient库常用接口

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

MYSQL API

1.初始化MySQL操作句柄。

//Mysql操作句柄初始化
// 参数说明:
// mysql为空则动态申请句柄空间进⾏初始化
// 返回值: 成功返回句柄指针, 失败返回NULL
MYSQL * mysql_init(MYSQL * mysql);

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

2.连接mysql服务器

// 连接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.设置字符集

// 设置当前客⼾端的字符集
// 参数说明:
// mysql--初始化完成的句柄
// csname--字符集名称,通常:"utf8"
// 返回值:成功返回0, 失败返回⾮0
int mysql_set_character_set(MYSQL * mysql, const char* csname)

4.选择操作的数据库

// 选择操作的数据库
// 参数说明:
// mysql--初始化完成的句柄
// db-----要切换选择的数据库名称
// 返回值:成功返回0, 失败返回⾮0
int mysql_select_db(MYSQL *mysql, const char *db)

5.执行sql语句

// 执⾏sql语句
// 参数说明
// mysql--初始化完成的句柄
// stmt_str--要执⾏的sql语句
// 返回值:成功返回0, 失败返回⾮0
int mysql_query(MYSQL* mysql, const char* stmt_str)

6.保存查询结果到本地

// 保存查询结果到本地
// 参数说明:
// mysql--初始化完成的句柄
// 返回值:成功返回结果集的指针, 失败返回NULL
MYSQL_RES* mysql_store_result(MYSQL* mysql)

7.获取结果集中的行数 

// 获取结果集中的行数
// 参数说明:
// result--保存到本地的结果集地址
// 返回值:结果集中数据的条数
uint64_t mysql_num_rows(MYSQL_RES* result);

 8.获取结果集中的列数

// 获取结果集中的列数
// 参数说明:
// result--保存到本地的结果集地址
// 返回值:结果集中每⼀条数据的列数
unsigned int mysql_num_fields(MYSQL_RES* result)

9.遍历结果集 

// 遍历结果集, 并且这个接⼝会保存当前读取结果位置,每次获取的都是下⼀条数据
// 参数说明:
// result--保存到本地的结果集地址
// 返回值:实际上是⼀个char **的指针,将每⼀条数据做成了字符串指针数组
// row[0]-第0列 row[1]-第1列 ...
MYSQL_ROW mysql_fetch_row(MYSQL_RES* result)

10.释放结果集 

// 释放结果集
// 参数说明:
// result--保存到本地的结果集地址
void mysql_free_result(MYSQL_RES* result)

11.关闭数据库客⼾端连接,销毁句柄 

// 关闭数据库客⼾端连接,销毁句柄
// 参数说明:
// mysql--初始化完成的句柄
void mysql_close(MYSQL* mysql)

12.获取mysql接口执行错误原因 

// 获取mysql接口执行错误原因
// 参数说明:
// mysql--初始化完成的句柄
const char* mysql_error(MYSQL* mysql)

示例代码:

#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 :%s\n",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 :%s\n",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("%s\n",sql);
        printf("mysql query failed :%s\n",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("%s\t",row[j]);
        }
        printf("\n");
    }
    //9.释放结果集
    mysql_free_result(res);
    //10.关闭连接,释放句柄
    mysql_close(mysql);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山雾隐藏的黄昏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值