当前位置: 首页 > news >正文

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插入结果

http://www.cnnetsun.cn/news/48725.html

相关文章:

  • SeedVR2 2.5.10全面评测:8GB显存也能玩转的AI视觉增强神器
  • PCSX2模拟器性能优化终极指南:从卡顿到流畅的完整解决方案
  • 告别卡顿:DBeaver性能优化终极指南
  • NetSonar网络诊断工具:快速定位网络问题的终极解决方案
  • 电子书格式不兼容 零门槛转换 一键搞定 电子书格式转换下载器
  • 『一键掌控』Defender Control:Windows安全防护的终极管理方案
  • 如何在3小时内构建28M微模型:数据预处理实战避坑指南
  • Wallpaper Engine壁纸下载器:5分钟学会轻松获取创意工坊动态壁纸
  • 250MB实现千亿级能力:腾讯混元0.5B重构边缘AI范式
  • HunyuanVideo-Avatar:单图+音频生成高保真数字人视频,开启内容创作新纪元
  • MATLAB 2008B完整安装指南:从下载到配置的一站式解决方案
  • 计算机毕业设计|基于springboot + vue图书借阅管理系统(源码+数据库+文档)
  • FLUX Kontext革命:AI图像编辑如何让普通人秒变设计高手
  • PyTorch 多卡训练常见坑:设置 CUDA_VISIBLE_DEVICES 后仍 OOM 在 GPU 0 的解决之道
  • 基于vue的线上商城购物系统_q90ol4sn_springboot php python nodejs
  • MPV播放器窗口管理终极指南:从零掌握精确定位技巧
  • DFT + SUMO + GALORE = DFT模拟实验光谱效果
  • 31、Ubuntu 网络配置全攻略
  • Sparklines:如何在3分钟内为你的数据监控系统添加可视化能力
  • 29、Ubuntu系统下数字设备与音视频使用全攻略
  • 34、Linux系统的文件共享与安全防护指南
  • 37、Ubuntu社区交流、资讯获取及常见问题解决指南
  • 40、Ubuntu系统常见问题及解决方法
  • 42、Ubuntu硬盘手动分区及相关资源指南
  • 超强音频机器人实战指南:让你的TeamSpeak服务器秒变音乐厅
  • LMMS音乐制作完全指南:从入门到精通的免费创作平台
  • 云原生监控实战:5分钟构建高可用可观测性平台
  • TensorBoard自定义配色实战:5步打造专业级可视化体验
  • 终极数据库教程:从零开始构建完整知识体系
  • 小米MiMo-Audio-7B:开启音频大模型少样本学习新纪元