ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

C++中访问MySql数据库的帮助类

2019-12-11 15:03:49  阅读:214  来源: 互联网

标签:info const 数据库 MySql C++ char bool sql mysql


1、头文件

#pragma once
 

// 网络通信头文件
#include <WinSock.h>

// 引入mysql头文件(比较好的做法是把文件夹拷到工程目录,也可以在vc目录里面设置)
#include <mysql.h> 

#include <Windows.h>

// 包含附加依赖项,也可以在工程--属性里面设置
//#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 <iostream>
#include <stdio.h>

#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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有