VS链接MySQL

一、环境配置

先安装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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值