数据库查询结果的保存方法(C++)

版权声明:本文为博主原创文章,商业转载请联系作者获得授权,非商业转载请注明出处。 https://blog.csdn.net/liitdar/article/details/81981318

本文主要介绍使用 C++ 语言保存数据库查询结果的方法。

1 概述

本文使用STL的组合结构来保存数据库查询结果,STL结构如下:

    // 定义存储sql结果的结构
    vector<map<string, string> > vecSqlResultMap;

即,我们使用 vector + map 的组合结构来保存数据库查询结果,假设现有一个数据库查询结果如下:

mysql> select * from roles_2;
+---------+------------+----------+
| role_id | occupation | camp     |
+---------+------------+----------+
|      12 | Mage       | alliance |
|      13 | Warlock    | Horde    |
+---------+------------+----------+
2 rows in set (0.01 sec)

mysql> 

那么 vector + map 的组合结构与上述查询结果的对应关系如下图:

所以,从上图中的对应关系能够看出,通过 vector + map 结构就可以保存数据库的查询结果了。

2 示例代码

这里展示一个示例代码,正常情况下,我们需要真正去查询数据库、获取数据库查询结果,本文为了简单突出重点内容,示例代码中用到的数据库查询结果使用的就是前文图中的数据库结果,属于虚构出来的查询结果。

示例代码(sql_results_test1.cpp)如下:

#include <iostream>
#include <map>
#include <vector>

using namespace std;

int main()
{
    // 定义存储sql结果的结构
    vector<map<string, string> > vecSqlResultMap;

    // 虚拟出一份sql查询结果
    // 列数
    int nColumeCount = 3;
    // 行数
    int nRowCount = 2;
    // 字段名
    string strField[3] = {"role_id", "occupation", "camp"};
    // 查询结果
    string strRowContent[2][3] = {{"12", "Mage", "alliance"}, {"13", "Warlock", "Horde"}};

    // 将sql查询结果保存起来
    // 查询结果共2行,所以外层循环2次
    for (int i = 0; i < 2; i++)
    {
        // 此map用于保存单行的数据
        map<string, string> mapRowValue;
        // 查询结果共3列,所以内存循环3次
        for (int j = 0; j < 3; j++)
        {
            mapRowValue.insert(pair<string, string>(strField[j], strRowContent[i][j]));
        }

        vecSqlResultMap.push_back(mapRowValue);
    }


    // 取出存储的sql查询结果
    cout << "first row, occupation is: " << vecSqlResultMap[0]["occupation"] << endl;
    cout << "second row, camp is: " << vecSqlResultMap[1]["camp"] << endl;

    return 0;
}


编译并执行上述代码,结果如下:

从上述执行结果能够看到,通过使用 vector + map 组合结构(vector<map<string, string> > vecSqlResultMap;),我们成功地将数据库查询结果保存起来了,而后又通过该组合结构,输出的需要的结果内容。

这里再次强调一下,上述代码中的数据库查询结果(包括数据、行数、列数等)是虚拟出来的,真实场景下需要通过查询数据库获得的,一般的数据库提供的接口,返回值肯定会有这些内容的。

猜你喜欢

转载自blog.csdn.net/liitdar/article/details/81981318