vs c++ 查询mysql 获取返回集数据转化

返回集数据结构[ 指针数组1 -> ["值1", "值2", "值3", ...], 指针数组2 -> ["值1", "值2", "值3", ...], ... ]

改为

指针 -> [ {"字段1": "值1", "字段2": "值2", ...}, {"字段1": "值1", "字段2": "值2", ...}, ... ]

+----------------+     +----------------+     +----------------+
| 指针数组1      |     | 指针数组2      |     | ...            |
| -> ["值1", "值2", ...]| -> ["值1", "值2", ...]|                |
+----------------+     +----------------+     +----------------+
转换后的数据结构示意图:


+----------------+
| 指针           |
| -> [           |
|      {"字段1": "值1", "字段2": "值2", ...}, |
|      {"字段1": "值1", "字段2": "值2", ...}, |
|      ...                                  |
|    ]                                     |
+----------------+
在上述示意图中,原始数据是由多个指针数组组成,每个数组对应结果集中的一行。转换后,我们有一个指针,它指向一个包含多个字典的数组,每个字典包含了字段名和对应的值。

​​​​​​​

cpp 复制代码
vector<map<string, string>> result; // [{ "id": "3","name": "Michael","age" : "35"},{},{},...]

// 执行查询
/*
    1 查询  mysql_query 只返回成功失败 ->数据保存到内存
    2 获取结果指针 mysql_store_result
    3 处理数据
*/
if (mysql_query(con, sql.c_str()) == 0) { // 该函数用于执行SQL查询语句,其中con是数据库连接对象,sql.c_str()将sql字符串转换为C风格的字符串。如果执行成功,返回值为0
    MYSQL_RES* result_set = mysql_store_result(con); // 该函数用于获取查询结果集,返回一个指向结果集的指针result_set [  ["1", "John", "25"],["2", "Alice", "30"] , ["3", "Michael", "35"]]
    if (result_set != NULL) {
        int num_fields = mysql_num_fields(result_set); // 该函数用于获取结果集中的字段数。列数
        MYSQL_ROW row; // [指针1,指针2,指针3]  MYSQL_ROW是MySQL C API中定义的数据类型,用于表示结果集中的一行数据。它实际上是一个字符指针数组,每个元素都指向一列数据的字符串值

        MYSQL_FIELD* fields = mysql_fetch_fields(result_set); // 获取所有字段信息

        while ((row = mysql_fetch_row(result_set)) != NULL) { // 该函数用于逐行获取结果集中的数据,返回一个指向当前行数据的指针row。当没有更多行可获取时,返回NULL。
            map<string, string> row_data; // 定义了一个空的map对象
            for (int i = 0; i < num_fields; i++) { // 取一行 每一列的取值
                row_data[fields[i].name] = row[i]; // row_data['id'] = row[0] row_data['获取字段名'] = 获取值 的意思是将获取到的值存储到 row_data 这个 map 对象中,以字段名作为键,值作为对应的值mysql_fetch_field_direct(result_set, i)->name
            }
            result.push_back(row_data); //  是向 vector 的尾部添加一个元素的函数
        }
        // 将每个字段的指针形式改为一个指向整体字典的指针
        mysql_free_result(result_set); // 整个过程就是把数据从[[],[],[],,,] 变成[{},{},{},,,] 变为把第一个内存清空 新的数据结构存在新的内存中 将数据从 vector<vector<string>> 的结构转换为 vector<map<string, string>> 的结构
    }
}
else {
    cout << "查询失败: " << mysql_error(con) << endl;
}
相关推荐
Uitwaaien5416 分钟前
51 单片机矩阵键盘密码锁:原理、实现与应用
c++·单片机·嵌入式硬件·51单片机·课程设计
Yeats_Liao23 分钟前
Spring 定时任务:@Scheduled 注解四大参数解析
android·java·spring
小唐C++1 小时前
C++小病毒-1.0勒索
开发语言·c++·vscode·python·算法·c#·编辑器
新知图书1 小时前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全
文城5211 小时前
Mysql存储过程(学习自用)
数据库·学习·mysql
沉默的煎蛋1 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
C语言扫地僧1 小时前
MySQL 事务及MVCC机制详解
数据库·mysql
小镇cxy2 小时前
MySQL事物,MVCC机制
数据库·mysql
Golinie2 小时前
【C++高并发服务器WebServer】-2:exec函数簇、进程控制
linux·c++·webserver·高并发服务器
课堂随想2 小时前
`std::make_shared` 无法直接用于单例模式,因为它需要访问构造函数,而构造函数通常是私有的
c++·单例模式