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;
}