C语言实现数据库MYSQL连接的完整踩坑过程

C语言实现数据库MYSQL连接的完整踩坑过程

起因

起初我写过一个c++的网吧管理系统在大一的时候,刚开始的时候用的是c语言通过文件去管理网吧的一些信息,后来利用面向对象的设计思路用数据库的方式去重新实现了一套方案。

vs2019中使用c语言连接数据库出现了各种的问题,网上找了很久才发现一套完整的解决方案!
感谢这个博主,太感谢了!

  • 首先需要确保你的电脑安装了MySQL数据库 具体教程参见我的MySQL安装的博客

以下是链接数据库的教程 我使用的是vs2019

  • 修改运行的环境是64位 解决方案右键属性 配置属性为debug 64位
    在这里插入图片描述
  • 重点是链接数据库的include 和lib
    在附加包含目录中添加你的数据库的include文件的位置
    杀杀杀
    在连接器->常规->附加库目录
    在这里插入图片描述
    在链接器->常规->附加依赖项 写一个libmysql.lib就可以
    在这里插入图片描述

然后把mysqllib.dll文件放到项目文件里面,不然会报错 
在这里插入图片描述

测试程序: 修改自己的数据库对应的信息即可

#include <stdio.h>
#include <Windows.h>
#include <mysql.h>
#include<iostream>
using namespace std;

int isOpen = 0;
MYSQL mysql;  //mysql连接
MYSQL_RES* res; //一个结果集结构体   
MYSQL_ROW row; //二维数组,存记录
const char DataBase_UserName[] = "root";    //数据库用户名username
const char DataBase_Password[] = "root";   //数据库密码,填自己的密码
const char DataBase_Host[] = "localhost";  //数据库连接地址
const char DataBase_Name[] = "odbc";  //database name
unsigned int DataBase_Port = 3306; //port

int ConnectDatabase(); //函数申明
void FreeConnect();   //释放资源
int AddOneInfo(const char* sql);
void GetAllInfo();
int UpdateOneInfo(const char *sql);
int DelOneInfo(const char* name);
int main()
{
	isOpen=ConnectDatabase();	//连接数据库
	if (isOpen)
	{
		GetAllInfo();
		mysql_free_result(mysql_store_result(&mysql));

		//添加一条信息
		printf("添加\n\n");
		const char *sql="insert into student values ('0121710852413', 'xiaolu','男');";
		AddOneInfo(sql);
		mysql_free_result(mysql_store_result(&mysql));

		printf("\n");
		GetAllInfo();
		mysql_free_result(mysql_store_result(&mysql));

		//修改一个信息
		printf("修改\n");
		const char* sql_update = "update student set name='whutxiaoliu' where name='xiaolu';";
		UpdateOneInfo(sql_update);

		printf("\n");
		GetAllInfo();
		mysql_free_result(mysql_store_result(&mysql));

		//删除一个信息
		printf("删除\n");
		const char* sql_delete = "delete from student where name='xiaobao'; ";
		DelOneInfo(sql_delete);

		printf("\n");
		GetAllInfo();
		mysql_free_result(mysql_store_result(&mysql));

	}
	return 0;
}
//查询所有的数据
void GetAllInfo()
{
	mysql_query(&mysql, "SET NAMES GBK");
	mysql_free_result(mysql_store_result(&mysql));
	//查询数据
	mysql_query(&mysql, "SELECT * from student");
	//获取结果集
	res = mysql_store_result(&mysql);
	//显示数据
	//给ROW赋值,判断ROW是否为空,不为空就打印数据。
	printf("展示所有的学生信息:\n");
	while (row = mysql_fetch_row(res))
	{
		printf("%s ", row[0]);
		printf("%s ", row[1]);
		printf("%s \n", row[2]);
	}
	printf("\n");
}

int AddOneInfo(const char* sql)
{
	if (isOpen)
	{
		mysql_query(&mysql, "set names gbk");
		mysql_free_result(mysql_store_result(&mysql));
		int res = mysql_query(&mysql, sql);
		if (!res)return 1;
		else
			return 0;
	}
	else
	{
		printf("数据库没有打开!");
		return 0;
	}
	return 1;
}

int UpdateOneInfo(const char* sql)
{
	if (isOpen)
	{
		mysql_query(&mysql, "set names gbk");
		mysql_free_result(mysql_store_result(&mysql));
		int res = mysql_query(&mysql, sql);
		if (!res)return 1;
		else
			return 0;
	}
	else
	{
		printf("数据库没有打开!");
		return 0;
	}
	return 1;
}

int DelOneInfo(const char *sql) {
	if (isOpen)
	{
		mysql_query(&mysql, "set names gbk");
		mysql_free_result(mysql_store_result(&mysql));
		int res = mysql_query(&mysql, sql);
		if (!res)return 1;
		else
			return 0;
	}
	else
	{
		printf("数据库没有打开!");
		return 0;
	}
	return 1;

}
int ConnectDatabase()
{
	//初始化mysql
	mysql_init(&mysql);   //连接mysql,数据库jiushi 
	if (!(mysql_real_connect(&mysql, DataBase_Host, DataBase_UserName, DataBase_Password, DataBase_Name, DataBase_Port, NULL, 0))) //中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
	{
		printf("Error connecting to database:%s\n", mysql_error(&mysql));
		return 0;
	}
	else
	{
		printf("连接数据库成功!");
		printf("Connected...\n");
		return 1;
	}
}
//释放资源
void FreeConnect()
{
	//释放资源
	//mysql_free_result(res);
	mysql_close(&mysql);
}

我的数据库信息:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小宝..

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

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

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

打赏作者

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

抵扣说明:

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

余额充值