右键项目选择 属性->调试 -> 环境 ,添加PATH = PATH=E:\software\mysql-8.0.25-winx64\bin(根据自己的安装目录选择)
注意:若没有设置,会报缺少libmysql.dll的错误
右键项目选择 属性 -> c/c++ -> 常规 -> 附加包含目录 ,添加E:\software\mysql-8.0.25-winx64\include(根据自己的安装目录选择)
右键项目选择 属性 -> 链接器 -> 常规 -> 附加库目录 ,添加E:\software\mysql-8.0.25-winx64\lib(根据自己的安装目录选择)
右键项目选择 属性 -> 链接器 -> 输入 -> 附加依赖项,添加E:\software\mysql-8.0.25-winx64\lib\libmysql.lib(根据自己的安装目录选择)
注意:用分号;隔开。
数据库名称:db
表名:user
|__ main.cpp //demo调用函数
|__ mysqlhelper.cpp //类函数实现
|__ mysqlhelper.h //mysql操作相关类
|__ mysqlhelper.h:
#ifndef MYSQL_HELPER_H #define MYSQL_HELPER_H #include <stdlib.h> #include <map> #include <vector> #include <string> using namespace std; #include <mysql.h> namespace mysqlhelper { // 连接数据库的一些必要信息 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 = "localhost"; port = 3306; user = "root"; password = "123456"; database = "db"; unix_socket = NULL; clientflag = 0; } }; class MySQLManager { public: //构造与析构函数 MySQLManager(); ~MySQLManager(); //数据库链接与释放 // 连接数据库 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; // 查询结果集 }; } #endif //MYSQL_HELPER_H
|__ mysqlhelper.cpp:
#include <iostream> #include <string> #include "mysqlhelper.h" using namespace std; namespace mysqlhelper { //构造与析构函数 MySQLManager::MySQLManager(){ m_res = NULL; } MySQLManager::~MySQLManager(){} // 初始化 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))) { std::cout << "mysql connect fail." << mysql_error(&m_mysql) << std::endl; return false; } std::cout << "mysql connect success."<< std::endl; 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)) { std::cout << "执行sql语句失败,错误信息为: " << mysql_error(&m_mysql) << endl; return false; } else { std::cout << "执行sql语句成功!" << endl; } return true; } // 查询数据 MYSQL_RES* MySQLManager::QueryData(const char* sql) { if (mysql_query(&m_mysql, sql)) { // 打错误log,这里直接显示到控制台 std::cout << "查询语句执行失败,错误信息为: " << mysql_error(&m_mysql) << endl; return nullptr; } else { std::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.cpp:
#include <iostream> #include "mysqlhelper.h" using namespace std; int main() { mysqlhelper::MySQLManager mysql; // 定义ConnectionInfo这个结构体,使用默认值,项目中一般从配置文件这读取 mysqlhelper::ConnectionInfo info; // mysql连接 if (!mysql.Init(info)) { return -1; } // 增加数据测试 const char* sql1 = "insert into user values (NULL, 'song', '99')"; mysql.ExecuteSql(sql1); // 删除数据测试 const char* sql2 = "delete from user where name = 'sun'"; mysql.ExecuteSql(sql2); // 修改数据测试 const char* sql3 = "update user set grade='22' where name = 'wu'"; mysql.ExecuteSql(sql3); // 查询数据测试 const char* sql4 = "select * from user"; mysql.QueryData(sql4); mysql.PrintQueryRes(); // 释放mysql资源 mysql.FreeConnect(); system("pause"); return 0; }
-----------------------------------------------------------------------------------------------------------------------------------------------------
如果本文对你有所帮助,请不要忘了点赞、收藏哦!!!
-----------------------------------------------------------------------------------------------------------------------------------------------------