- 论坛徽章:
- 0
|
//获取SQL执行后的结果集,RecordContainer为vector<map<string,string>>
bool sdb::CMySql::GetQueryResult(RecordContainer& vecResult)
{
if(NULL == m_pRes)
{
m_strError = "结果集为空!";
return false;
}
MYSQL_FIELD *pFields = mysql_fetch_fields(m_pRes); // 结果集中字段结构
if(NULL == pFields)
{
m_strError = "获取结果集的字段结构失败!";
return false;
}
MYSQL_ROW row = NULL; // 结果集记录行
ULONG* pColLen = NULL; // 记录行长度指针
CHAR aryColValue[MAX_COL_LEN] = {0}; // 存储数据列变量
UINT uiColNum = mysql_num_fields(m_pRes); // 结果集中的列数
std::string strFieldValue;
QueryResultMap rowResMap;
// 遍历结果集
while(NULL != (row = mysql_fetch_row(m_pRes)))
{
pColLen = mysql_fetch_lengths(m_pRes); // 获取行记录集各字段的长度结构
// 获取记录行中的所需字段值
if(NULL != row && NULL != pColLen)
{
UINT i = 0;
for(; i < uiColNum; ++i)
{
memset(aryColValue, 0, MAX_COL_LEN);
memmove(aryColValue, row[i], pColLen[i]);
strFieldValue = aryColValue;
if(!rowResMap.insert(QueryResultMap::value_type(pFields[i].name, strFieldValue)).second)
{
m_strError = "结果集的字段值插入Map容器失败!";
return false;
}
if(m_vecQueryFields.size() < uiColNum)
m_vecQueryFields.push_back(pFields[i].name); // 存储被查询的字段名
}
vecResult.push_back(rowResMap);
rowResMap.clear();
}
}
return true;
}
这段程序有问题吗,望高手指点! |
|