当前位置:   article > 正文

mysql客户端开发_C开发Mysql客户端

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

运行结果:

61abafa1fdf4ac2dcd390649eebb312f.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;

}

运行结果:

51756a0378bd2b3b8fe718fae0565c74.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文件:

78b698d646f423d9d808afe704330c1d.png

a5ee5972aaa99402ecfad1f4444335a1.png

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

运行结果:

55d1b303d22b18ca2b95886a9bd5734d.png

看看Mysql:

4ad9f1e09142fa4fb1970fd6b04cf3fe.png

ea2e1bdd845fc5c5ed20c301e7059c2c.png

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

6ecc826ecdd77fa3d3dc9854a231d360.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/663331
推荐阅读
相关标签
  

闽ICP备14008679号