概要
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