概要

visual studio c++ 2015 连接mysql数据库(版本8.0)
参考链接:https://blog.csdn.net/baidu_15952103/article/details/86136868
主要包括两部分:
(1)vs 2015 + mysql环境配置
(2)使用vs 2015进行mysql数据库表的增删改查

第一部分 vs2015 + mysql环境配置

之前百度了半天,才最终找到正确配置visual studio c++ 2015 + mysql(8.0)的方法。
简单来讲,主要分为以下几步:
(1)下载mysql 8.0 官方网址:https://downloads.mysql.com/archives/installer/
在这里插入图片描述
下载mysql并安装,安装教程自行百度,如果安装过程中提示start the server失败,那么此时不要关闭安装界面!(如下图),在桌面找到电脑图标 -> 右键选中管理 -> 服务与应用程序 -> 双击服务,随后找到MySQL服务,选中之后选择属性 -> 登录 ,将登录身份改为系统账户登录即可,随后应用,确定之后,再回到mysql的安装界面。点击execute就可以正常完成mysql的安装。
在这里插入图片描述
安装完成之后,将mysql加入到系统环境变量,并测试mysql安装是否成功。
【注意】上述mysql版本我在安装时,选中的5.x的驱动,这块可以因人而异:如果vs是2019的较新版本可以安装8.0,如果是vs 2015推荐还是5.x!

(2)配置visual studio c++ 2015 + mysql (8.0)的环境
由于win10环境下使用vs 2015连接mysql进行sql数据库的操作需要使用mysql的驱动连接mysql数据库,因此有必要对vs 2015的项目属性进行环境配置。
在vs2015配置mysql时,一般采用dll方式将mysql的动态库和头文件配置到vs2015即可。
1》将mysql安装之后的include目录加入vs2015项目中(不需要将include和dll文件copy到项目中,经本人测试半天,发现连接容易异常
在这里插入图片描述
2》同理将mysql的静态库目录加入vs项目配置中
在这里插入图片描述
3》配置mysql的静态库和dll库
将mysql安装目录中的libmysql.lib加入链接器的输入附加依赖项中,然后将mysql安装目录的libmysql.dll复制一份放到当前vs项目中(同代码同一级目录)
在这里插入图片描述
经过上述操作之后,vs 2015 + mysql的环境配置就正式搭建好了!!!,在项目中点击编译即可测试mysql + vs是否配置成功。

第二部分 在vs2015的项目中新建文件,执行mysql的增删改查的操作

.h文件的代码如下:主要进行mysql数据库的增删改查!!!
#ifndef __MYSQL_OPERATION_H__
#define __MYSQL_OPERATION_H__

#include "mysql.h"
#include <iostream>
#include <string.h>
#include <boost/format.hpp>

/*
 C++使用mysql的驱动有两种方式:
   (1)使用c风格的connnection c
   (2)使用c++风格的connection c++,但是c++风格的connnection需要导入boost库
*/

// database table user
struct UserInfo
{
	int				userID;
	std::string		username;
	int				age;
	std::string     address;
};

class Mysql {
public:
	MYSQL		mysql;		// 数据库句柄
	MYSQL_RES	*result;	// 查询结果集
	MYSQL_ROW	row;		// 记录结构体

	// 构造函数
	Mysql();
	// 析构函数
	~Mysql();

	// 查询
	void query();
	// 插入
	bool insert(UserInfo userInfo);
	// 删除
	bool del(UserInfo userInfo);
	// 修改
	bool update(UserInfo userInfo);
	// 执行sql的语句
	bool execute_sql(std::string str);
};
#endif

实现代码如下:
#include "MysqlOperation.h"

Mysql::Mysql()
{
	// 初始化数据库
	mysql_init(&mysql);
	// 设置字符编码
	mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");

	// 建立连接
	if (!mysql_real_connect(&mysql, "localhost", "root", "123456", "user", 3306, NULL, 0))
	{
		std::cout << "连接数据库失败" << std::endl;
		abort();
	}
}

void Mysql::query()
{
	// 查询数据
	char *sql = "select * from user";
	std::cout << sql << std::endl;
	int ret = mysql_query(&mysql, sql);
	std::cout << "ret is " << ret << std::endl;
	// 获取结果集
	result = mysql_store_result(&mysql);
	// 循环获取ROW的数据
	while ((row = mysql_fetch_row(result)) != NULL)
	{
		std::cout << "row0 is " << row[0] << std::endl;
		std::cout << "row1 is " << row[1] << std::endl;
		std::cout << "row2 is " << row[2] << std::endl;
		std::cout << "row3 is " << row[3] << std::endl << std::endl;
	}

	// 释放结果集
	mysql_free_result(result);
}

bool Mysql::insert(UserInfo userInfo)
{
	/*
	   注意事项:
	   (1)sql语句插入数据时,需要对双引号“”进行转义,如values(%s, %d, %s)需要转义为values(\"%s\", %d, \"%s\")
	   (2)C++没有格式化字符串操作,需要借助C语言的snprintf()完成
	        int snprintf(char *str, size_t size, const char *format,...)
			例如: snprintf(buf, sizeof(buf), "%d", rand());
	   (3)借助boost库的format()函数来进行字符串格式化操作
	*/
	std::string insertStr = "insert into user(username, age, address) values(\"%s\", %d, \"%s\");";
	// 字符串格式化操作方法1:借助snprintf()完成
	//char sqlBuf[1024];
	//int awd = snprintf(sqlBuf, sizeof(sqlBuf), insertStr.c_str(), userInfo.username.c_str(), userInfo.age, userInfo.address.c_str());
	//std::cout << sqlBuf << std::endl;
	// 字符串格式化操作方法2:借助boost库的format()方法来完成
	boost::format sqlFmt("insert into user(username, age, address) values(\"%s\", %d, \"%s\");");
	sqlFmt % userInfo.username % userInfo.age % userInfo.address;
	std::string sqlStr = sqlFmt.str();
	int res = mysql_query(&mysql, sqlStr.c_str());
	std::cout << "execute sql:" << sqlStr << ", result is " << res << std::endl;

	if (res) return false;
	return true;
}

// 析构函数
Mysql::~Mysql()
{
	// 关闭数据库
	mysql_close(&mysql);
}

bool Mysql::del(UserInfo userInfo)
{
	std::string sqlStr = "delete from user where username = \"%s\";";
	char buf[1024];
	snprintf(buf, sizeof(buf), sqlStr.c_str(), userInfo.username.c_str());
	std::cout << buf << std::endl;
	int ret = mysql_query(&mysql, buf);
	
	if (ret) return false;
	return true;
}

bool Mysql::update(UserInfo userInfo)
{
	boost::format sqlFmt("update user set age = 32 where username = \"%s\"");
	sqlFmt % userInfo.username;
	std::string result = sqlFmt.str();
	std::cout << result << std::endl;
	int ret = mysql_query(&mysql, result.c_str());
	if (ret) return false;
	return true;
}

bool Mysql::execute_sql(std::string str)
{
	if (str.size() == 0) return false;
	int ret = mysql_query(&mysql, str.c_str());
	if (ret) return false;
	return true;
}

运行之后,数据打印正常,mysql数据库中也有相应数据产生
在这里插入图片描述
在这里插入图片描述

小结

关键点,还在于vs c++ 2015 + mysql环境的配置,采用mysql安装后 mysql server目录下的include 、lib和dll文件来配置vs2015中的项目,配置成功后,就可以在vs 2015中进行mysql数据库的增删改查操作了,至于mysql常见的函数调用api接口一般不变,可以参考一下文档:
mysql的c/c++ api接口:https://www.cnblogs.com/fps2tao/p/17809118.html
和https://blog.csdn.net/qq_45491628/article/details/128934998

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐