C语言(APL指令)对mysql数据库的操作-----连接、读取、写入、修改、删除(保姆级讲解)

目录

 前言:

C语言操作mysql前的准备工作

1.C语言连接mysql数据库

函数介绍

(1)mysql_ini() 函数

(2)mysql_library_init()函数

(3)mysql_real_connect()函数

(4)mysql_set_character_set()函数

 连接mysql的完整代码如下:

 (5)mysql_close()函数

 (6)mysql_library_end()函数

2.C语言读取mysql数据库数据

 函数介绍

(1)mysql_real_query()函数

(3) mysql_store_result()函数

 (4) mysql_use_result()函数

(5) mysql_num_rows()函数

(6)mysql_num_fields()函数

(7)mysql_fetch_row()函数

完整代码

3.C语言写入数据到mysql数据库

 代码如下:

4. C语言修改mysql数据库内容

代码如下:

5.C语言删除MySQL数据库数据

代码如下: 

ALL.连接、读取、写入、修改、删除 完整代码:


 前言:

        前面几期都讲了怎么去安装以及配置mysql数据库,准备工作都完成了,这下总算是可以去写代码了,这一期我讲讲怎么在vs2019通过C语言来操作mysql数据库,包括连接、读取、写入、修改、删除 这些内容。

        好了,开始进入正题了。

C语言操作mysql前的准备工作

这里我们要打开cmd黑窗口,开启服务器net start mysql

 然后就可以开始啦。

1.C语言连接mysql数据库

函数介绍

(1)mysql_ini() 函数

头文件:#include<mysql.h>

函数原型: MYSQL *mysql_init(MYSQL *mysql)

函数返回值: 一个被始化的MYSQL*句柄,在内存不足的情况下,返回NULL

备注:如果 mysql_init() 分配了一个新对象,则在调用 mysql_close() 关闭连接时将其释放。

 示例:

	MYSQL mysql;
	if (mysql_init(&mysql) == NULL)
	{
		printf("%s\n",mysql_error(&mysql));//可以通过mysql_error()函数得知错误信息,返回错误信息的字符串
		exit(1);
	}

(2)mysql_library_init()函数

头文件:#include<mysql.h>

函数原型:int mysql_library_init(int argc,char **argv,char **groups)

返回值:如果初始化成功就返回0,如果失败就返回非0

备注:在非多线程环境中,mysql_init() 根据需要自动调用 mysql_library_init()。如果是在多线程环境中是要手动去调用这个函数的,比如建立聊天室等,就必须要调用到这个函数,所以我个人建议写上去比较好。在mysql 8.0版本,argc、argv 和 groups 参数未使用,所以写成mysql_library_init(0,NULL,NULL)

示例:

	if (mysql_library_init(0, NULL, NULL) != 0)
	{
		printf("false\n");
		exit(1);
	}

(3)mysql_real_connect()函数

头文件:#include<mysql.h>

函数原型: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 int client_flag);

返回值:函数返回值: 如果连接成功返回一个MYSQL*连接句柄,如果连接失败返回NULL

这个函数的参数比较多,这里我一个一个介绍

MYSQL *mysql  表示传入MySQL结构的地址

const char *host  表示连接的主机名或者IP,127.0.0.1或者localhost表示连接到本机

const char *user  表示用户名

const char *passwd   表示账户密码

const char *db  表示要连接的数据库名字

unsigned int port  表示连接服务器的TCP/IP端口

const char *unix_socket  表示连接的类型,一般设为NULL,默认值

unsigned int client_flag   表示MySQL运行ODBC数据库的标记,一般设为0,默认值

示例:

if (mysql_real_connect(&mysql, "localhost", "heweijie", "heweijie", "hello", 3306, 0, 0) == NULL)
	{
		printf("%s\n", mysql_error(&mysql));
		exit(1);
	}

备注: 其实在mysql_real_connect()函数之前的老版本是用mysql_connect()函数的,但是这个函数已经被淘汰了,使用基本上都是使用mysql_real_connect()函数

(4)mysql_set_character_set()函数

头文件:#include<mysql.h>

函数原型:int mysql_set_character_set(MYSQL *mysql,const char *csname)

返回值:如果设置成功就返回0,如果失败就返回非0

功能:设置字符集,建议用utf8 ,因为utf8 基本包含了全世界所有文字

示例:

	if (mysql_set_character_set(&mysql, "utf8") != 0)
	{
		printf("erroe\n");
		exit(1);
	}

 连接mysql的完整代码如下:

#include<stdio.h>
#include<mysql.h>//头文件
#include<stdlib.h>
int main()
{
	MYSQL mysql;//定义一个MySQL类型的变量
	if (mysql_init(&mysql) == NULL)//mysql变量初始化
	{
		printf("error\n");
		exit(1);//如果发生错误就退出程序
	}
	if (mysql_library_init(0, NULL, NULL) != 0)//数据库初始化
	{
		printf("error\n");
		exit(1);
	}
	if (mysql_real_connect(&mysql, "localhost", "heweijie", "heweijie", "hello", 3306, 0, 0) == NULL)//连接
	{
		printf("%s\n", mysql_error(&mysql));//输出错误原因(字符串)
		exit(1);
	}
	else
		printf("connect successfully\n");//连接成功
    if (mysql_set_character_set(&mysql, "utf8") != 0)//设置字符集为utf8
	{
		printf("erroe\n");
		exit(1);
	}
//…………………………
//…………………………相关操作
	mysql_close(&mysql);//关闭与服务器的连接
	mysql_library_end();//结束数据库的运行
	return 0;
}

 (5)mysql_close()函数

头文件:#include<mysql.h>

函数原型:void mysql_close(MYSQL *mysql)

功能:这个是用于关闭服务器连接的,当我们在对mysql数据库操作(读取、删除、写入等)完成之后要记得断开连接

 (6)mysql_library_end()函数

头文件:#include<mysql.h>

函数原型:mysql_library_end(void)

功能:前面我们调用了初始化函数,如果关闭了服务器之后发生数据泄露或者内存泄露,我们就可以调用这个函数来结束对数据库的使用

2.C语言读取mysql数据库数据

 函数介绍

(1)mysql_real_query()函数

头文件:#include<mysql.h>

函数原型:int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)

返回值:如果对数据库的操作成功就返回0,如果失败就返回非0;

功能:这个函数的功能是非常强大的,可以对数据库进行访问以及操作

 参数说明:

MYSQL *mysql  传入MySQL类型的地址

const char *stmt_str  是操作字符串

unsigned long length   一般是操作字符串的长度

 示例:

	char p[100] = "select *from user";
	if (mysql_real_query(&mysql, p, strlen(p)) != 0)
	{
		printf("%s\n", mysql_error(&mysql));
		exit(1);
	}

备注:mysql_real_query()函数跟mysql_real_connect()函数一样,也是有一个为mysql_query()函数,不过现在也是基本不用了,mysql_real_query()函数效率更加高

 (2)  MYSQL_RES与MYSQL_ROW 类型

功能:这两个类型是对查询结果进行处理,MYSQL_RES 是用于获取读取结果集;MYSQL_ROW 是用于对结果集进行下一步操作

(3) mysql_store_result()函数

头文件:#include<mysql.h>

函数原型:MYSQL_RES *mysql_store_result(MYSQL *mysql)

返回值:如果上面mysql_real_query()函数操作成功就会返回一个结果集(注意:返回的是全部结果集),如果返回的结果为空的的话这个函数就会返回NULL(这里要注意结果为空返回NULL还是发生错误返回NULL)

 示例如下:

	MYSQL_RES*res;
    res = mysql_use_result(&mysql);
	if (res == NULL)
	{
        if (strcmp(mysql_error(&mysql), "") != 0)//错误检测
        {
            printf("%s\n",mysql_error(&mysql));
            exit(1);
         }
        else
		printf("结果为空");
	}

 (4) mysql_use_result()函数

头文件:#include<mysql.h>

函数原型:MYSQL_RES *mysql_use_result(MYSQL *mysql)

返回值:如果操作成功就返回一行的结果集,如果失败就返回NULL

(5) mysql_num_rows()函数

头文件:#include<mysql.h>

函数原型:int mysql_num_rows(MYSQL_RES *res)

返回值:返回得到结果集的行数

(6)mysql_num_fields()函数

头文件:#include<mysql.h>

函数原型:int  mysql_num_fields(MYSQL_RES *res)

返回值:返回得到结果集的列数

(7)mysql_fetch_row()函数

头文件:#include<mysql.h>

函数原型:MYSQL_ROW mysql_fetch_row(MYSQL_RES *res)

功能:自动检索到结果集的下一行

返回值:如果下一行有内容就返回真true,如果下一行为空就返回false

完整代码

#include<stdio.h>
#include<mysql.h>//头文件
#include<stdlib.h>
#include<string.h>
int main()
{
	MYSQL mysql;//定义一个MySQL类型的变量

    //连接数据库

	if (mysql_init(&mysql) == NULL)//mysql变量初始化
	{
		printf("error\n");
		exit(1);//如果发生错误就退出程序
	}
	if (mysql_library_init(0, NULL, NULL) != 0)//数据库初始化
	{
		printf("error\n");
		exit(1);
	}
	if (mysql_real_connect(&mysql, "localhost", "heweijie", "heweijie", "hello", 3306, 0, 0) == NULL)//连接
	{
		printf("%s\n", mysql_error(&mysql));//输出错误原因(字符串)
		exit(1);
	}
	else
		printf("connect successfully\n");//连接成功
    if (mysql_set_character_set(&mysql, "utf8") != 0)//设置字符集为utf8
	{
		printf("erroe\n");
		exit(1);
	}

    //查询数据
    MYSQL_RES* res;//这个变量是用来接受到结果
	MYSQL_ROW row;//这个变量是用来输出表示接受的结果
    	char p[100] = "select *from user";//输出表中全部数据指令
	if (mysql_real_query(&mysql, p, strlen(p)) != 0)
	{
		printf("%s\n", mysql_error(&mysql));
		exit(1);
	}
	res = mysql_use_result(&mysql);//接收数据
	if (res == NULL)
	{
        if (strcmp(mysql_error(&mysql), "") != 0)//错误检测
        {
            printf("%s\n",mysql_error(&mysql));
        exit(1);
         }
        else
		printf("结果为空");
	}
		int y = mysql_num_fields(res);//获取数据的列数
	printf("%d	%d\n", x, y);
	while (row = mysql_fetch_row(res))
	{
		for (int i = 0; i < y; i++)
			printf("%-10s", row[i]);//输出数据
		puts("");
	}

	mysql_close(&mysql);//关闭与服务器的连接
	mysql_library_end();//结束数据库的运行
	return 0;
}

mysql_real_query函数的操作指令基本跟cmd的操作指令差不多的,如果想了解更多可以看看这个cmd指令操作MySQL数据库(图文详细介绍)_守约斯维奇的博客-CSDN博客

 当前数据库名字为hello,当前操作的表名字为user,内容如下:

3.C语言写入数据到mysql数据库

 相关函数:mysql_real_query()  

这个函数其实是对数据库进行操作的函数,不仅仅可以用于查询,而且还可以用于数据的删除修改,写入等等……

 代码如下:

    char p[50];
strcpy(p, "insert into user values (12,'蒙恬','123441','将军')");
	if (mysql_real_query(&mysql, p, strlen(p)) != 0);
	{
		printf("%s\n", mysql_error(&mysql));
		exit(1);
	}
    else
	printf("写入成功\n");
	

4. C语言修改mysql数据库内容

 相关函数:mysql_real_query()  

代码如下:

char p[50];
strcpy(p, "update user set comment='B级别刮痧师' where id=6");
	if (mysql_real_query(&mysql, p, strlen(p)) != 0)
	{
		printf("%s", mysql_error(&mysql));
		exit(0);
	}
	else
		printf("修改成功\n");

5.C语言删除MySQL数据库数据

 相关函数:mysql_real_query()  

代码如下: 

char p[50];
strcpy(p, "delete from user where id=7");//删除id=7的这一行
	if (mysql_real_query(&mysql, p, strlen(p)) != 0)
	{
		printf("%s", mysql_error(&mysql));
		exit(0);
	}
	else
		printf("删除成功\n");

ALL.连接、读取、写入、修改、删除 完整代码:

#include<stdio.h>
#include<mysql.h>//头文件
#include<stdlib.h>
#include<string.h>
int main()
{
	MYSQL mysql;//定义一个MySQL类型的变量

    //连接数据库

	if (mysql_init(&mysql) == NULL)//mysql变量初始化
	{
		printf("error\n");
		exit(1);//如果发生错误就退出程序
	}
	if (mysql_library_init(0, NULL, NULL) != 0)//数据库初始化
	{
		printf("error\n");
		exit(1);
	}
	if (mysql_real_connect(&mysql, "localhost", "heweijie", "heweijie", "hello", 3306, 0, 0) == NULL)//连接
	{
		printf("%s\n", mysql_error(&mysql));//输出错误原因(字符串)
		exit(1);
	}
	else
		printf("connect successfully\n");//连接成功
    if (mysql_set_character_set(&mysql, "utf8") != 0)//设置字符集为utf8
	{
		printf("erroe\n");
		exit(1);
	}

    //查询数据
    MYSQL_RES* res;//这个变量是用来接受到结果
	MYSQL_ROW row;//这个变量是用来输出表示接受的结果
    	char p[100] = "select *from user";//输出表中全部数据指令
	if (mysql_real_query(&mysql, p, strlen(p)) != 0)
	{
		printf("%s\n", mysql_error(&mysql));
		exit(1);
	}
	res = mysql_use_result(&mysql);//接收数据
	if (res == NULL)
	{
        if (strcmp(mysql_error(&mysql), "") != 0)//错误检测
        {
            printf("%s\n",mysql_error(&mysql));
        exit(1);
         }
        else
		printf("结果为空");
	}
		int y = mysql_num_fields(res);//获取数据的列数
	printf("%d	%d\n", x, y);
	while (row = mysql_fetch_row(res))
	{
		for (int i = 0; i < y; i++)
			printf("%-10s", row[i]);//输出数据
		puts("");
	}
        //写入数据
    strcpy(p, "insert into user values (12,'蒙恬','123441','将军')");
	if (mysql_real_query(&mysql, p, strlen(p)) != 0);
	{
		printf("%s\n", mysql_error(&mysql));
		exit(1);
	}
    else
	printf("写入成功\n");

    //修改数据
    strcpy(p, "update user set comment='B级别刮痧师' where id=6");
	if (mysql_real_query(&mysql, p, strlen(p)) != 0)
	{
		printf("%s", mysql_error(&mysql));
		exit(0);
	}
	else
		printf("修改成功\n");

    //删除数据
    strcpy(p, "delete from user where id=7");//删除id=7的这一行
	if (mysql_real_query(&mysql, p, strlen(p)) != 0)
	{
		printf("%s", mysql_error(&mysql));
		exit(0);
	}
	else
		printf("删除成功\n");

	mysql_close(&mysql);//关闭与服务器的连接
	mysql_library_end();//结束数据库的运行
	return 0;
}

好啦,这一期就讲到这里了,喜欢的小伙伴们给个关注吧,thanks!

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Fitz&

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

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

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

打赏作者

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

抵扣说明:

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

余额充值