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; // 查询结果集 };
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; } }
浙公网安备 33010602011771号