【mysql】c++操作mysql

c++操作mysql

先定義一個數據庫管理的cpp文件和頭文件。

MySQLManager.h 文件:

#pragma once

// 網絡通信頭文件
#include <WinSock.h>

// 引入mysql頭文件(比較好的做法是把文件夾拷到工程目錄,也可以在vc目錄裏面設置)
#include "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 MySQLManager
{
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;            // 查詢結果集

};

MySQLManager.cpp 文件:

#include <iostream>
#include <stdio.h>
using namespace std;

// 連接數據庫
bool MySQLManager::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 MySQLManager::FreeConnect()
{
    //釋放資源
    mysql_free_result(m_res);
    mysql_close(&m_mysql);

    return false;
}

// 執行sql語句, 包括增加、刪除、更新數據
bool MySQLManager::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* MySQLManager::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 MySQLManager::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;
    }

}

main函數:

#include <iostream>
#include "MySQLManager.h"

using namespace std;

int main()
{
    MySQLManager mysql;
    ConnectionInfo info;
    // 填充ConnectionInfo這個結構體,項目中一般從配置文件這讀取
    info.user = "root";
    info.password = "your_password";
    info.host = "localhost";
    info.port = 3306;
    info.database = "test";
    info.unix_socket = NULL;
    info.clientflag = 0;

    // mysql連接
    if (!mysql.Init(info))
    {
        return -1;
    }

    // 增加數據測試
    const char* sql1 = "insert into user values (NULL, 'Ada', 'password')";
    mysql.ExecuteSql(sql1);

    // 刪除數據測試
    const char* sql2 = "delete from user where name = 'AceTan'";
    mysql.ExecuteSql(sql2);

    // 修改數據測試
    const char* sql3 = "update user set password='update_password' where name = 'Ada'";
    mysql.ExecuteSql(sql3);

    // 查詢數據測試
    const char* sql4 = "select * from user";
    mysql.QueryData(sql4);
    mysql.PrintQueryRes();

    // 釋放mysql資源
    mysql.FreeConnect();

    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章