mysql代码操作

本文详细介绍了如何使用MySQL C API进行数据库操作,包括初始化句柄、连接服务器、设置字符集、选择数据库、执行SQL语句、保存查询结果、获取结果集信息、遍历结果集、释放结果集、关闭连接以及处理错误。示例代码展示了完整的操作流程,涵盖了增删改查的基本操作。
摘要由CSDN通过智能技术生成
mysql客户端的实现代码,通过mysql接口实现
mysql客户端的实现代码接口
1.初始化mysql句柄,mysql_init
2.连接mysql服务器,mysql_real_connect
3.设置当前客户端的字符集,mysql_set_character_set
4.选择操作的数据库,mysql_select_db
#
5.执行sql语句,mysql_query
6.保存查询结果到本地,mysql_store_result
7.获取结果集中的行数,mysql_num_rows
8.获取结果集中的列数,mysql_num_fields
9.遍历结果集,mysql_fetch_row
10.释放结果集,mysql_free_result
#
11.关闭数据库客户端连接,销毁句柄,mysql_close
12.获取接口错误原因,mysql_error

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

example/test.c(对mysql接口的使用)
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<mysql/mysql.h>




int main(){
  //1.初始化mysql句柄-mysql_init
  MYSQL *mysql=mysql_init(NULL);
  if(mysql==NULL){
    printf("init mysql error\n");
    return -1;
  }
  //2.连接mysql服务器-mysql_real_connect
  if(mysql_real_connect(mysql,"127.0.0.1","root","","db_blog",0,NULL,0)==NULL){
    printf("connect mysql server failed:%s\n,mysql_error(mysql)");
    return -1;
  }
  //3.设置当前客户端的字符集-mysql_set_character_set
  if(mysql_set_character_set(mysql,"utf8")!=0){
    printf("set character failed:%s\n",mysql_error(mysql));
    return -1;
  }
  //4.选择操作的数据库-mysql_select_db
  if(mysql_select_db(mysql,"db_blog")!=0){
    printf("select db failed:%s\n",mysql_error(mysql));
    return -1;
  }








  //5.执行sql语句-mysql_query
  //创建表
  char*sql_str="create table if not exists tb_stu(id int,name varchar(32),info text,score  decimal(4,2),birth datetime);";
  int ret=mysql_query(mysql,sql_str);
  if(ret!=0){
  printf("query sql failed:%s\n",mysql_error(mysql));
  return -1;
  }
  //增inset
  char*sql="insert tb_stu values(1,'zhangsan','shuai','99.456','2002-04-06 12:00:00');";
  //改update
  char*sql="update tb_stu set name='lisi',info='better shuai'where name='zhangsan';";
  //删delete
  char*sql="delete from tb_stu where name='lisi';";
  //查select
  char*sql="select *from tb_stu;";
  int ret=mysql_query(mysql,sql);
  if(ret!=0){
    printf("query sql failed:%s\n",mysql_error(mysql));
    return -1;
  }




  //6.保存查询结果到本地-mysql_store_result
  MYSQL_RES*res=mysql_store_result(mysql);
  if(res==NULL){
    printf("store result failed:%s\n",mysql_error(mysql));
    return -1;
  }
  //7.获取结果集中的行数-mysql_num_rows
  int num_row=mysql_num_rows(res);//行数
  //8.获取结果集中的列数-mysql_num_fields
  int num_col=mysql_num_fields(res);//列数
  //9.遍历结果集-mysql_fetch_row
  int i=0;
  for(i=0;i<num_row;i++){
    MYSQL_ROW row=mysql_fetch_row(res);//res中有读取位置控制,每次获取的都是下一条数据
    for(int j=0;j<num_col;j++){
      printf("%s\t",row[j]);
    }
    printf("\n");
  }
  //10.释放结果集-mysql_free_result
  mysql_free_result(res);
  //11.关闭数据库客户端连接,销毁句柄-mysql_close
  mysql_close(mysql);
  return 0;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值