目录
(4)mysql_set_character_set()函数
前言:
前面几期都讲了怎么去安装以及配置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!