news 2026/6/15 15:50:57

c++ 将xml数据写入sqlite数据库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c++ 将xml数据写入sqlite数据库

1、准备xml的读写库;sqlite数据处理库

2、设计xml文件关系

3、代码实现

(1)xml读取部分代码

void ConfigHandle::_InitTables(TiXmlNode* pParentNode)
{
m_vecTableColumnInfo.clear();
if (pParentNode == NULL) return;

TiXmlNode* pTablesNode = pParentNode->FirstChild("Tables");
if (pTablesNode == NULL) return;


TiXmlNode* pTableNode = pTablesNode->FirstChild("Table");
if (pTableNode == NULL) return;

while (pTableNode != NULL)
{
TableColumn _TableColumn;

TiXmlElement* pItemElement = pTableNode->ToElement();
_TableColumn.strTableName = pItemElement->Attribute("Name");


TiXmlNode* pFieldNode = pItemElement->FirstChild("Field");
while (pFieldNode != NULL)
{
TiXmlElement* pFieldItemElement = pFieldNode->ToElement();

ColumnField _ColumnField;
_ColumnField.strName = pFieldItemElement->Attribute("Name");

int nType = 0;
if (pFieldItemElement->QueryIntAttribute("Type", &nType) != TIXML_SUCCESS)
{
nType = 1;
}

_ColumnField.nType = nType;

_TableColumn.vecColumnField.push_back(_ColumnField);

pFieldNode = pFieldNode->NextSiblingElement("Field");
}
m_vecTableColumnInfo.push_back(_TableColumn);

pTableNode = pTableNode->NextSiblingElement("Table");
}
}

void ConfigHandle::_InitDatas(TiXmlNode* pParentNode)
{
m_vecTableDataInfo.clear();
if (pParentNode == NULL) return;

TiXmlNode* pDatasNode = pParentNode->FirstChild("Datas");
if (pDatasNode == NULL) return;


TiXmlNode* pDataNode = pDatasNode->FirstChild("Data");
if (pDataNode == NULL) return;

while (pDataNode != NULL)
{
TableData _TableData;

TiXmlElement* pItemElement = pDataNode->ToElement();
_TableData.strTableName = pItemElement->Attribute("Name");


TiXmlNode* pItemNode = pItemElement->FirstChild("Item");
while (pItemNode != NULL)
{
TiXmlElement* pItemElement = pItemNode->ToElement();
TableDataItemInfo _TableDataItemInfo;
TiXmlAttribute* attribute = pItemElement->FirstAttribute();
while (attribute)
{
TableDataItem _TableDataItem;
_TableDataItem.strFiledName = attribute->Name();
_TableDataItem.strData = attribute->Value();
_TableDataItemInfo.vecItemData.push_back(_TableDataItem);

attribute = attribute->Next();
}
_TableData.vecTableData.push_back(_TableDataItemInfo);

pItemNode = pItemNode->NextSiblingElement("Item");
}
m_vecTableDataInfo.push_back(_TableData);

pDataNode = pDataNode->NextSiblingElement("Data");
}
}

(2)sqlite数据处理

Kompex::SQLiteDatabase *pDatabase = new Kompex::SQLiteDatabase("test.db", SQLITE_OPEN_READWRITE, 0);
Kompex::SQLiteStatement *pStmt = new Kompex::SQLiteStatement(pDatabase);

pStmt->SqlStatement("DELETE FROM user");

for (auto &_info : m_vecTableData)
{
auto itrTableFind = find_if(m_vecTableColumns.begin(),
m_vecTableColumns.end(), [&](TableColumn &_tableColumn)
{
return _tableColumn.strTableName == _info.strTableName;
});
if (itrTableFind == m_vecTableColumns.end()) continue;

CString strFields;
for (auto &_col : (*itrTableFind).vecColumnField)
{
if (strFields.IsEmpty())
{
strFields = _col.strName;
}
else
{
strFields.Append(L",");
strFields.Append(_col.strName);
}
}


// 行数据
for (auto &_data : _info.vecTableData)
{
CString strTableData;
// 所有列数据
for (auto &_item : _data.vecItemData)
{

CString str1;
int nType = _getType((*itrTableFind).vecColumnField, _item.strFiledName);
switch (nType)
{
case 0: //int
{
str1.Format(L"%d", _wtoi(_item.strData));
break;
}
case 1: //string
{
str1.Format(L"'%s'", _item.strData);
break;
}
}

if (strTableData.IsEmpty())
{
strTableData = str1;
}
else
{
strTableData.Append(L",");
strTableData.Append(str1);
}
}
CString strSQL;
strSQL.Format(L"INSERT INTO %s (%s) VALUES (%s)", _info.strTableName, strFields, strTableData);

string strTmpSQL = CStringA(strSQL);
pStmt->SqlStatement(strTmpSQL.c_str());

}
}

delete pStmt;
delete pDatabase;

4、sqlite插入结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 1:58:02

如何通过3个关键步骤诊断并优化3D重建质量问题?

如何通过3个关键步骤诊断并优化3D重建质量问题? 【免费下载链接】colmap COLMAP - Structure-from-Motion and Multi-View Stereo 项目地址: https://gitcode.com/GitHub_Trending/co/colmap 当你在使用COLMAP进行3D重建时,是否遇到过模型表面出现…

作者头像 李华
网站建设 2026/6/15 13:12:37

Asio异步编程(进阶):构建高性能网络应用的核心指南

从同步阻塞到异步非阻塞,这不仅是API的切换,更是一次编程思维的彻底革新。掌握Asio的异步模型,意味着你能够用更少的资源处理成千上万的并发连接。 当你已经能够熟练使用Asio编写同步网络程序后,下一步就是征服异步编程这座高峰。…

作者头像 李华
网站建设 2026/6/15 12:13:51

Ofd2Pdf终极教程:5分钟掌握OFD批量转PDF的完整方案

你是否曾经面对重要的OFD格式文档却束手无策?在行政办公、财务报销、教育学习等场景中,OFD文件虽然标准化但兼容性差,而PDF格式则拥有更好的跨平台支持。Ofd2Pdf正是为解决这一痛点而生的开源转换工具,让你轻松实现格式转换的无缝…

作者头像 李华
网站建设 2026/6/15 0:43:55

如何突破RPC性能瓶颈?FlatBuffers+gRPC超低延迟架构解析

如何突破RPC性能瓶颈?FlatBuffersgRPC超低延迟架构解析 【免费下载链接】flatbuffers FlatBuffers:内存高效的序列化库。 项目地址: https://gitcode.com/GitHub_Trending/fl/flatbuffers 开篇:性能危机的真实场景 想象一下这个场景&…

作者头像 李华
网站建设 2026/6/15 12:18:30

光刻胶增感剂用9-苯基吖啶(9-PA)

9-苯基吖啶(9-PA)1. 9-苯基吖啶的战略重要性及其在光刻胶中的应用1.1 概述9-苯基吖啶(9-Phenylacridine,简称9-PA)是一种杂环芳香化合物,作为高效光刻胶增感剂在半导体制造、显示面板等高端领域具有重要作用…

作者头像 李华
网站建设 2026/6/15 7:29:31

光刻胶增感剂用5-硝基苊

5-硝基苊分子结构1 5-硝基苊的基本性质与行业应用1.1 基本性质5-硝基苊(5-Nitroacenaphthene)是一种重要的有机化合物,其化学式为CHNO,分子量为199.21,CAS号为602-87-9。该化合物在常温下表现为黄色针状结晶&#xff0…

作者头像 李华