c 客户端服务端处理mysql_C开发Mysql客户端

1、C与Mysql

因为Mysql是用C语言开发的,所以会有一系列的API可以调用;

2、C调用Mysql的基础模型

#include

#include

#include

#include

int main(void){

int ret = 0;

MYSQL mysql;

MYSQL *connect = NULL;

connect = mysql_init(&mysql);  //初始化

if(connect == NULL){

ret = -1;

printf("func mysql_init() err\n");

return ret;

}

connect = mysql_real_connect(connect, "localhost", "root", "123456", "mydb1", 0, NULL, 0);

if(connect == NULL){    //连接mysql

ret = -1;

printf("func mysql_real_connect() err\n");

return ret;

}

printf("func mysql_real_connect() ok\n");

mysql_close(&mysql);

printf("hello world\n");

return ret;

运行命令:

gcc dm01_hello.c -o dm01_hello -I/usr/include -L/usr/lib64/mysql -lmysqlclient -lm -lrt -ldl -lstdc++ -lpthread

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

3、C查询Mysql

#include

#include

#include

#include

/*

*中文问题

*mysql_query   查询

*mysql_store_result 获取句柄

*

*locate mysql.h 可以查找这个.h文件所在的目录

*

*

*/

int main(void){

int ret = 0;

MYSQL mysql;

MYSQL *connect = NULL;

connect = mysql_init(&mysql);

if(connect == NULL){

ret = mysql_errno(&mysql);

printf("func mysql_init() err\n");

return ret;

}

connect = mysql_real_connect(connect, "localhost", "root", "123456", "mydb1", 0, NULL, 0);

//中文问题的解决

mysql_set_character_set(&mysql, "utf8");

if(connect == NULL){

ret = mysql_errno(&mysql);

printf("func mysql_real_connect() err\n");

return ret;

}

//查询

const char *query = "select * from student";

ret = mysql_query(&mysql, query);

if(ret != NULL){

ret = mysql_errno(&mysql);

printf("func mysql_query() err\n");

return ret;

}

//获取结果集和

//结果集和中可能含有多行数据,获取结果集

//mysql_store_result设计理念:告诉句柄,我一下子全部把数据从服务器端取到客户端,然后缓存起来

MYSQL_RES *result = mysql_store_result(&mysql);

//使用的过程中从服务器端获取结果

//MYSQL_RES *result = mysql_use_result(&mysql);

//可得该数据库中这张表每行有多少元素

unsigned int num = mysql_field_count(&mysql);

int i;

MYSQL_ROW row = NULL;  //在mysql.h中可以看到

//打印表头

MYSQL_FIELD *fields = mysql_fetch_fields(result);

for(i = 0; i 

printf("%s\t", fields[i].name);

}

printf("\n");

//打印表中内容

while(row = mysql_fetch_row(result)){

for(i = 0; i 

printf("%s\t", row[i]);

}

printf("\n");

}

/*

*  这里是我们自己看到该表一行有多少元素

while(row = mysql_fetch_row(result)){

printf("%s, %s, %s, %s, %s, %s\n", row[0], row[1], row[2], row[3], row[4], row[5]);

}

*/

mysql_free_result(result);

mysql_close(&mysql);

printf("hello world\n");

return ret;

}

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

4、C开发Mysql客户端

只实现了查询的功能:

#include

#include

#include

#include

int main(int argc, char **argv){

int ret = 0;

MYSQL mysql;

MYSQL *connect = NULL;

char sqlbuf[80];

connect = mysql_init(&mysql);

if(connect == NULL){

ret = mysql_errno(&mysql);

printf("func mysql_init() err\n");

return ret;

}

connect = mysql_real_connect(connect, "localhost", "root", "123456", argv[1], 0, NULL, 0);

//中文问题的解决

mysql_set_character_set(&mysql, "utf8");

if(connect == NULL){

ret = mysql_errno(&mysql);

printf("func mysql_real_connect() err\n");

return ret;

}

for(;;){

memset(sqlbuf, 0, sizeof(sqlbuf));

printf("mysql> :");

//scanf()语句对tab 空格 回车 都省去了,对sql语句将会发生截断,用gets()可保持sql语句的原样性

gets(sqlbuf);

//退出

if(strncmp("exit", sqlbuf, 4) == 0 || strncmp("quit", sqlbuf, 4) == 0){

break;

}

//查询是否为SQL语句

//ret = mysql_query(&mysql, "set name utf8");

ret = mysql_query(&mysql, sqlbuf);

if(ret != NULL){

ret = mysql_errno(&mysql);

printf("func mysql_query() err\n");

return ret;

}

if(strncmp("select", sqlbuf, 6) == 0 || strncmp("SELECT", sqlbuf, 6) == 0){

MYSQL_RES *result = mysql_store_result(&mysql);

unsigned int num = mysql_field_count(&mysql);  //表头有多少列

int i;

MYSQL_ROW row = NULL;  //在mysql.h中可以看到

//打印表头

MYSQL_FIELD *fields = mysql_fetch_fields(result);

for(i = 0; i 

printf("%s\t", fields[i].name);

}

printf("\n");

//打印表中内容

while(row = mysql_fetch_row(result)){

for(i = 0; i 

printf("%s\t", row[i]);

}

printf("\n");

}

mysql_free_result(result);

}

}

mysql_close(&mysql);

printf("hello world\n");

return ret;

}

看看mysql.h文件:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

可以知道:MYSQL_ROW的真实类型:char **;

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

看看Mysql:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

由于客户端的C语言开发数据库,我只实现了查询功能,其他的功能没有实现,导致没有打印出来,但是现在已经可以通过这个客户端对数据库进行操作了;

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值