# MySQL-Cpp **Repository Path**: fingsinz/my-sql-cpp ## Basic Information - **Project Name**: MySQL-Cpp - **Description**: MySQL 在 C++ 工程中的使用 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-02-27 - **Last Updated**: 2024-11-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MySQL 的 C++ 使用 *使用 mysql.h 头文件* --- 环境: * Visual Studio 2022 * Qt6.6.1_msvc2019_64 * MySQL-8.0.36 --- ## demo展示 预先创建数据库 `students`,其中有表 `students`。 ![数据库内容](imgs/tables.jpg) ![表格](imgs/table.jpg) 表格创建 sql 语句: ```sql create table students ( id int unsigned not null auto_increment primary key, name char(8) not null, sex char(1) not null, age tinyint unsigned not null, tel char(13) null default "-" ); ``` 启动该 demo,进行数据库的连接与写入: ![添加数据](imgs/addinfo.jpg) ![查询数据](imgs/showinfo.jpg) ## 主要代码 DataBase.h: ```cpp #pragma once #include #include #include #include #include class DataBase { private: bool _state; // 连接状态 MYSQL *_conn; // 数据库连接 std::vector fd; // 字段列数组 std::vector _field;// 字段名 MYSQL_RES *_res; // 返回行的查询结果集 MYSQL_ROW _column; // 一个行数据的类型安全的表示 public: /* * @brief 构造函数,初始化参数 */ DataBase(); /* * @brief 连接数据库 * @param ip IP地址 * @param name 用户名 * @param pass 密码 * @param dataBaseName 数据库名 * @param port 端口 */ bool connect(std::string const &ip, std::string const &name, std::string const &pass, std::string const &dataBaseName, int const port); /* * @brief 获取表字段数 * @param tableName 表名 */ int getTableField(std::string const &tableName); /* * @brief 查询表 * @param tableName 表名 * @return 查询结果 */ std::string query(std::string const &tableName); /* * @brief 执行 sql 指令 * @param sentence sql 命令 */ bool implement(std::string const &sentence); }; ``` DataBase.cpp: ```cpp #include "DataBase.h" DataBase::DataBase() : _state(false), _res(nullptr), _column(nullptr) { _conn = new MYSQL; } bool DataBase::connect(std::string const &ip, std::string const &name, std::string const &pass, std::string const &dataBaseName, int const port) { if (_state) return false; // 初始化数据库 mysql_init(_conn); // 连接数据库 if (mysql_real_connect(_conn, ip.c_str(), name.c_str(), pass.c_str(), dataBaseName.c_str(), port, NULL, 0)) { _state = true; return true; } } int DataBase::getTableField(std::string const &tableName) { if (!_state) return -1; // 将字符串格式化为查询数组 char query[150]; sprintf_s(query, "show columns from %s", tableName.c_str()); // 执行查询 if (mysql_query(_conn, query)) return -1; // 获取查询结果 _res = mysql_store_result(_conn); if (_res == nullptr) return -1; return mysql_affected_rows(_conn); } std::string DataBase::query(std::string const &tableName) { if (!_state) return ""; // 获取列数 int field = getTableField(tableName); // 将字符串格式化为查询数组 char query[150]; sprintf_s(query, "select * from %s", tableName.c_str()); // 执行查询 if (mysql_query(_conn, query)) return ""; // 获取查询结果 _res = mysql_store_result(_conn); if (_res == nullptr) return ""; // 将查询结果转化为字符串输出 fd.reserve(field); fd.resize(field); for (int i = 0; i < field; i ++) fd[i] = mysql_fetch_field(_res); std::string res = ""; while (_column = mysql_fetch_row(_res)) { for (int i = 0; i < field; i ++) res += _column[i], res += "\t"; res += "\n"; } return res; } bool DataBase::implement(std::string const &sentence) { if (!_state) return false; // 字符串格式化 char query[150]; sprintf_s(query, "%s", sentence.c_str()); // 执行命令 if (mysql_query(_conn, query)) return false; return true; } ```