1、头文件
#pragma once
// 网络通信头文件
#include
// 引入mysql头文件(比较好的做法是把文件夹拷到工程目录,也可以在vc目录里面设置)
#include
#include
// 包含附加依赖项,也可以在工程--属性里面设置
//#pragma comment(lib, "wsock32.lib")
//#pragma comment(lib, "libmysql.lib")
// 连接数据库的一些必要信息
struct ConnectionInfo
{
const char* host; // 主机地址
const char* user; // 用户名
const char* password; // 密码
const char* database; // 数据库名
unsigned int port; // 端口号
const char* unix_socket; // unix连接标识
unsigned long clientflag; // 客户端连接标志
// 构造函数,设置一些默认值
ConnectionInfo() :
host("127.0.0.1"),
port(3306),
unix_socket(NULL),
clientflag(0)
{
}
};
class MysqlHelper
{
public:
// 连接数据库
bool Init(ConnectionInfo& info);
// 释放连接
bool FreeConnect();
// 增加数据
// bool InsertData(const char* sql);
// 删除数据
// bool DeleteData(const char* sql);
// 更新数据
// bool UpdateData(const char* sql);
// 执行sql语句, 包括增加、删除、更新数据
bool ExecuteSql(const char* sql);
// 查询数据
MYSQL_RES* QueryData(const char* sql);
// 打印结果集
void PrintQueryRes();
private:
MYSQL m_mysql; // mysql连接
MYSQL_RES* m_res; // 查询结果集
};
View Code
2、源文件
#include
#include
#include "MysqlHelper.h"
using namespace std;
// 连接数据库
bool MysqlHelper::Init(ConnectionInfo& info)
{
// 初始化mysql,连接mysql,数据库
mysql_init(&m_mysql);
// 连接失败
if (!(mysql_real_connect(&m_mysql, info.host, info.user, info.password, info.database, info.port, info.unix_socket, info.clientflag)))
{
return false;
}
return true;
}
// 释放连接
bool MysqlHelper::FreeConnect()
{
//释放资源
mysql_free_result(m_res);
mysql_close(&m_mysql);
return false;
}
// 执行sql语句, 包括增加、删除、更新数据
bool MysqlHelper::ExecuteSql(const char * sql)
{
if (mysql_query(&m_mysql, sql))
{
// 打错误log,这里直接显示到控制台
cerr << "执行sql语句失败,错误信息为: " << mysql_error(&m_mysql) << endl;
return false;
}
else
{
cout << "执行sql语句成功!" << endl;
}
return true;
}
// 查询数据
MYSQL_RES* MysqlHelper::QueryData(const char* sql)
{
if (mysql_query(&m_mysql, sql))
{
// 打错误log,这里直接显示到控制台
cerr << "查询语句执行失败,错误信息为: " << mysql_error(&m_mysql) << endl;
return nullptr;
}
else
{
cout << "查询语句执行成功!" << endl;
}
// 存储查询结果
m_res = mysql_store_result(&m_mysql);
return m_res;
}
// 遍历结果集
void MysqlHelper::PrintQueryRes()
{
if (nullptr == m_res || NULL == m_res)
{
return;
}
// 获取行数
// unsigned int rows = mysql_affected_rows(m_mysql);
// 字段列数组
MYSQL_FIELD* field = nullptr;
//存字段名二维数组
char fieldName[64][32];
// 获取字段名
for (int i = 0; field = mysql_fetch_field(m_res); ++i)
{
strcpy_s(fieldName[i], field->name);
}
// 获取列数
int columns = mysql_num_fields(m_res);
for (int i = 0; i < columns; ++i)
{
// 使用C语言的printf格式化更方便一点
printf("%10s\t", fieldName[i]);
}
cout << endl;
MYSQL_ROW row;
while (row = mysql_fetch_row(m_res))
{
for (int i = 0; i < columns; ++i)
{
printf("%10s\t", row[i]);
}
cout << endl;
}
}
View Code
标签:info,const,数据库,MySql,C++,char,bool,sql,mysql
来源: https://www.cnblogs.com/LY-HeroesRebor/p/12022551.html