一、环境配置
先安装mysql,安装过程在此不赘诉。安装完成之后右键项目属性添加mysql 中include头文件路径并添加库文件路径和库文件,如下图:
以后步骤完成之后输入下面的代码执行,如果出现
直接将libmysql.dll文件复制到 C:\Windows\System32目录下即可
二、代码部分
- MySQL4CAPI.h
##第一部分
#pragma once
#include "mysql.h"
#include <string>
#include <vector>
using std::string;
using std::vector;
struct Orders
{
int id;
int price;
string order_date;
string custmer;
};
#pragma comment(lib,"libmysql.lib")
//1 调用mysql_library_init():初始化MySQL C API库
//2 调用mysql_init():初始化变量和线程处理程序
//2.5 调用mysql_options():设置连接选项
//3 调用mysql_real_connect():连接到MySQL服务器
//4 调用mysql_real_query():执行指定为长度字符串的SQL查询
//5 调用mysql_close():关闭服务器连接
//6 调用mysql_library_end():终止MySQL C API库
class MySQL4CAPI
{
MYSQL mysql;
public:
int errornum; //错误号
string errorInfo; //错误信息
public:
MySQL4CAPI();
~MySQL4CAPI();
//连接数据库
bool OpenConn(const char * host, const char * username, const char * pwd, const char * dbName,unsigned port = 0);
//获取错误信息
void GetErrorInfo();
//断开数据库连接
void Close();
//执行操作
bool ExecuteSQL(const char* sql);
//查询操作
bool QuerySQL(const char* sql, vector<vector<string>>& resultSet);
//查询订单表
bool QueryOrders(const char* sql, vector<Orders>& result);
};
- MySQL4CAPI.cc
###第二部分
#include "MySQL4CAPI.h"
#include <iostream>
using std::cout;
MySQL4CAPI::MySQL4CAPI()
{
//1.调用mysql_library_init():初始化MySQL C API库
if (mysql_library_init(0, NULL, NULL))
{
std::cout << "could not initialize MySQL library\n";
getchar();
exit(1);
}
//2.调用my_init():初始化变量和线程处理程序
if (mysql_init(&mysql) == nullptr)
{
std::cout << "could not initialize MYSQL\n";
getchar();
exit(1);
}
//2.5 调用mysql_options():设置连接选项
if (mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"))
{
std::cout << "could not set MySQL options\n";
getchar();
exit(1);
}
//mysql_set_character_set(&mysql, "gbk");
}
MySQL4CAPI::~MySQL4CAPI()
{
Close();
//6.调用mysql_library_end():终止MySQL C API库
mysql_library_end();
}
bool MySQL4CAPI::OpenConn(const char * host, const char * username, const char * pwd, const char * dbName, unsigned port)
{
//3.调用mysql_real_connect():连接到MySQL服务器
if (mysql_real_connect(&mysql, host, username, pwd, dbName, port, nullptr, 0) == nullptr)
{
GetErrorInfo();
return false;
}
return true;
}
void MySQL4CAPI::GetErrorInfo()
{
errornum = mysql_errno(&mysql);
errorInfo = mysql_error(&mysql);
cout << "error code:" << errornum << "," << "error msg:" << errorInfo << "\n";
getchar();
}
void MySQL4CAPI::Close()
{
//5.调用mysql_close():关闭服务器连接
mysql_close(&mysql);
}
bool MySQL4CAPI::ExecuteSQL(const char* sql)
{
//4.调用mysql_real_query()
if(mysql_real_query(&mysql,sql,strlen(sql)))
{
GetErrorInfo();
return false;
}
return true;
}
bool MySQL4CAPI::QuerySQL(const char* sql, vector<vector<string>> &resultSet)
{
//1.查询
if(mysql_real_query(&mysql, sql, strlen(sql)))
{
GetErrorInfo();
return false;
}
//2.接收查询结果
MYSQL_RES* result = mysql_store_result(&mysql);
//获取行数
//unsigned int rows = mysql_num_rows(result);
//获取列数
unsigned int fields = mysql_num_fields(result);
MYSQL_ROW row;//行对象 记录
while ((row = mysql_fetch_row(result))) //不停遍历行 知道行对象为null
{
vector<string> lineDate;
for(unsigned int i=0;i < fields;++i)
{
if(row[i])
{
lineDate.push_back(row[i]);
}
else
{
lineDate.push_back("");
}
}
resultSet.push_back(lineDate);
}
mysql_free_result(result);
return true;
}
bool MySQL4CAPI::QueryOrders(const char* sql, vector<Orders>& result)
{
//1.查询
if (mysql_real_query(&mysql, sql, strlen(sql)))
{
GetErrorInfo();
return false;
}
//2.接收查询结果
MYSQL_RES* res = mysql_store_result(&mysql);
//获取列数
unsigned int fields = mysql_num_fields(res);
MYSQL_ROW row;//行对象 记录
while ((row = mysql_fetch_row(res))) //不停遍历行 知道行对象为null
{
Orders temp;
temp.id = std::atoi(row[0]);
temp.price = std::atoi(row[1]);
temp.order_date = row[2];
temp.custmer = row[3];
result.push_back(temp);
}
mysql_free_result(res);
return true;
}