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);}elseprintf("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);}elseprintf("结果为空");}
(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);}elseprintf("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);}elseprintf("结果为空");}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);}elseprintf("写入成功\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);}elseprintf("修改成功\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);}elseprintf("删除成功\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);}elseprintf("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);}elseprintf("结果为空");}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);}elseprintf("写入成功\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);}elseprintf("修改成功\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);}elseprintf("删除成功\n");mysql_close(&mysql);//关闭与服务器的连接mysql_library_end();//结束数据库的运行return 0;
}
好啦,这一期就讲到这里了,喜欢的小伙伴们给个关注吧,thanks!
C语言(APL指令)对mysql数据库的操作-----连接、读取、写入、修改、删除(保姆级讲解)相关推荐
- MySQL 数据库的操作 连接、新增、删除、选择数据库 命令行(带图)
MySQL 数据库的操作 连接.新增.删除.选择数据库 命令行 一.连接数据库 在命令行通过 下面命令 mysql -u root -p123456 #这里跟的是自己的密码 8.0的密码要回车后输入. ...
- MySQL数据库快速入门到精通(超详细保姆级,建议收藏)这可能是目前最适合你的教程,从基础语法到实例演示。
前言 此文章旨在为需要掌握快速开发和复习MySQL的同学所准备,您完全可以把此文章当作参考文档来使用,本文将尽量精简,使您快速的理解和掌握语法. 关于MySQL MySQL是一个关系型数据库管理系统, ...
- c 编程 mysql结果集_使用mysql C语言API编写程序—MYSQL数据库查询操作(执行查询操作,获取查询结果的字段数,记录行数,...
//MYSQL_RES保存查询结构 MYSQL_RES* result_ = NULL; int error_code = 0; //保存错误码 char error_info[1024] = '\0 ...
- c语言 mysql 查询数字_使用mysql C语言API编写程序—MYSQL数据库查询操作
//MYSQL_RES保存查询结构 MYSQL_RES* result_ = NULL; int error_code = 0;//保存错误码 char error_info[1024] = '\0' ...
- 基于c语言的简单的mysql数据库操作
基于c语言的简单的mysql数据库操作 最近做项目需要利用c语言对mysql进行获取数据的操作,于是我对mysql社区提供的c语言调用mysql的部分api进行了简单封装,这里做下记录,方便以后回顾. ...
- C语言对mysql数据库的操作
C语言对mysql数据库的操作 原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎 ...
- php mysql持久连接是怎样的_怎样使PHP与MySQL数据库进行持久连接
本篇文章是关于介绍PHP与MySQL数据库进行持久连接的具体操作步骤,有需要的朋友可以了解一下,希望能对你有帮助. 数据库持久连接: 1.持久的数据库连接是指在脚本结束运行时不关闭的连接.当收到一个持 ...
- 通过图形界面对MySQL数据库进行操作
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...
- MySQL数据库常用操作(20221211)
记录:360 场景:MySQL数据库常用操作,启动.重启.停止MySQL服务:创建用户.数据库.表.主键.索引.注释等.配置远程可连接.配置环境变量.常用系统表操作.常用命令行操作.表的增删改查等操作 ...
最新文章
- flask 常见关系模板代码
- 6.18docker(一)Compose 模板文件
- html制作滚动游戏,HTML标签marquee实现滚动效果的简单方法(必看)
- Request请求对象
- java图形界面重写坐标_重写自由软件和计算机图形的历史
- linux 指定cpu运行线程,linux 线程与CPU绑定
- python往mysql存入数据_Python向mysql存入数据出错.
- android中handler简单用法
- 高中信息技术:网络基础知识(IP地址、网页设计)、多媒体技术(图像PS、音频、视频、动画)
- 英语口语测试评分软件,最客观的英语口语APP亲身测评,这3款软件让你的口语脱颖而出...
- 使用Springboot开发前后端分离校园智能出行拼车系统
- Android Persistent常驻内存分析
- 基于移动端端vant使用ImagePreview 图片预览的使用的一些问题
- 漫步数理统计二十五——正态分布
- JAVA Web day01--- Android小白的第一天学习笔记
- 信息系统典型的开发架构
- .NET 4.0 Interop新特性ICustomQueryInterface
- python歌词特效,根据歌词的进度在图片上显示歌词
- 使用css animation动画做边框闪动效果
- 短视频软件开发——平台同质化如何破局