本文主要介绍使用 C++ 编程语言保存数据库查询结果的具体方法。
1 概述
本文使用 STL(Standard Template Library)的组合结构来保存数据库查询结果,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;),成功地将数据库查询结果保存起来了,而后又通过该组合结构,输出了需要的结果内容。
这里再次强调一下,上述示例代码中的数据库查询结果(包括数据、行数、列数等)是虚拟出来的,真实场景下需要通过查询数据库获得的,一般数据库提供的接口,返回值肯定会有这些内容的。