C++&&MYSQL

前提:电脑安装mysql和Visual Studio 

1.在C++项目中添加创建mysql的库文件

1.1 在Visual Studio建立一个x64的项目。创建一个解决方案或空项目,在配置项目的属性之前,将编译的配置管理器设置为x64。

1.2 在项目的属性中添加创建mysql的库文件

1.2.1 在VC++目录的包含目录中添加下载的mysql的include文件,在库目录中添加下载的mysql的bin文件

1.2.2 在链接器的输入的附加依赖项中添加mysql的bin文件下的libmysql.lib

1.2.3 第一次在Visual Studio连接数据库,需要把libmysql.dll放在C:\Windows\System32下1.2.4 检查下,是否在电脑的环境变量中加了mysql,否则无法在cmd界面通过命令行直接操作mysql2.在代码中连接数据库

2.1 引入头文件 #include <mysql.h>

2.2 在代码中连接,例子如下:

/******************************************
*功能:根据用户所在的关卡id获取关卡数据
*输入:
		level - 保存关卡信息结构体变量
*		level_id - 用户所在关卡id
*返回值:
*		获取成功返回true,失败false
*******************************************/
bool fetch_level_info(LEVELINFO &level, int level_id)
{
	/********************************************************************
	*注:MYSQL mysql; 和 MYSQL * con = mysql_init(NULL); 作用相同,可互相代替--------???不对,这2个的区别是?

	`MYSQL mysql` 是定义了一个 MYSQL 结构体类型的变量 `mysql`,而 `MYSQL * con = mysql_init(NULL)` 定义了一个指针变量 `con`,
	并将其初始化为 `mysql_init(NULL)` 的返回值,该函数返回一个指向 MYSQL 结构体的指针。

	简单来说,`MYSQL mysql` 是直接定义了一个 MYSQL 结构体的变量,而 `MYSQL * con = mysql_init(NULL)` 是定义了一个指针变量,
	并将其指向通过 `mysql_init` 函数初始化的 MYSQL 结构体实例。

	通常情况下,使用指针变量可以更灵活地操作和管理内存,并能方便地传递给其他函数进行处理。

	MYSQL mysql;
	MYSQL_RES * res; //查询结果集
	MYSQL_ROW row;   //记录结构体
	char sql[256];
	bool ret = false;

	//1.连接数据库
	if (connect_db(mysql) == false)
	{
		return false;
	}
	********************************************************************/
	MYSQL_RES * res; //查询结果集
	MYSQL_ROW row;   //记录结构体
	char sql[256];
	bool ret = false;

	//1.初始化数据库句柄
	MYSQL * con = mysql_init(NULL);

	//2.设置字符编码
	mysql_options(con, MYSQL_SET_CHARSET_NAME, "gbk");

	//3.连接数据库:127.0.0.1是本地IP,root、admin_123是安装mysql数据库时设置的用户名和密码,box_man是连接的mysql中的具体的数据库(需要先在数据库创建),3306是连接端口,NULL和0一般写死即可
	if (mysql_real_connect(con, "127.0.0.1", "root", "admin_123", "box_man", 3306, NULL, 0) == NULL)
	{
		printf("数据库连接出错, 错误原因:%s\n", mysql_error(con));
		return false;
	}

	//2.获取用户信息
	snprintf(sql, 256, "SELECT name, map_row, map_column, map_data, next_level_id FROM levels WHERE id='%d';", level_id);
	ret = mysql_query(con, sql); //成功返回0

	if (ret)
	{
		printf("数据库查询出错, 错误原因:%s\n", mysql_error(con));
		mysql_close(con);
		return false;
	}

	//3.获取结果
	res = mysql_store_result(con);
	row = mysql_fetch_row(res);

	if (row == NULL) //没有查找到记录
	{
		mysql_free_result(res);
		mysql_close(con);
		return false;
	}

	level.id = level_id;
	level.name = row[0];
	level.map_row = atoi(row[1]);//查找到的记录是字符,转为整型
	level.map_column = atoi(row[2]);
	level.map_data = row[3];
	level.next_level = atoi(row[4]);

	printf("id: %d  name: %s  map_row: %d  map_column: %d  map_data:%s  next_level: %d\n", 
		   level.id, level.name.c_str(), level.map_row, level.map_column, level.map_data.c_str(), level.next_level); //打印ID

	//4.返回结果
	mysql_free_result(res); //释放结果集

	mysql_close(con); //关闭数据库

	return true;
}

3. 编译时,可以先将SDL检查设置为否,以防报错

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值