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

解析xml文件并录入数据库

主函数:

参数处理、信号处理、打开日志、解析参数到结构体、添加进程心跳、处理业务函数

业务处理函数:

将规则xml加载到结构体(xml文件名、对应表名、更新标志、预先执行语句)、打开源文件夹并匹配10000个xml文件、判断数据库是否开启、连接数据库、while中:读取一个源文件夹中的xml数据文件、处理xml数据文件函数、更新进程心跳、(处理xml数据文件成功了)将xml数据文件在服务端进行备份、(处理xml数据文件失败了、原因是入库参数、表不存在、预处理sql失败)备份到指定的err目录、(处理xml数据文件失败了、原因是数据库错误)返回、(处理xml数据文件失败了、原因是打开xml文件失败)返回、while外:如果目录为空(文件处理完了)休眠、更新进程心跳

处理xml数据文件函数(目录文件名):

        记时、清空三个计数、根据参数:目录文件名对照规则结构体找到对应表名、获取数据库字典中的字段容器、获取数据库字典中的主键容器、查询数据库中表的大小(验证数据库中是否有表)、拼接需要插入的语句、绑定变量到sql语句、执行预处理sql语句、打开xml文件失败则回滚、while内:获取打开的xml文件的一行数据、xml文件计数++、解析该行的字段的值、执行插入语句、判断失败原因是否违反唯一性约束、是否需要更新、执行更新语句、成功的话更新记录数++、插入成功的话插入计数器++、提交事务

将规则xml文件加载到容器:

        打开参数结构体的目录、循环中:读取一行、清空规则结构体、获取规则xml的参数名对应的值,放入规则结构体变量中、将规则结构体变量压入容器中

找到对应表名函数:

        遍历规则容器中规则结构体,匹配结构体的文件名和当前xml数据文件的文件名、将匹配的结构体设置为当前规则结构体

获取字段容器函数:

       连接数据库、表名的字典查询语句、变量绑定输入表名、三个变量绑定输出的字段名、字段类型、字段长度、连接异常就断开、获取结果集、判断结果集输出到结构体变量的类型,并归一化(varchar都用char代替)、日期设置类型长度为14、数字设置类型为number、其他类型跳过、number类型、长度设置为22、拼接所有字段用逗号、放入字段容器中、删除最后一个逗号

获取主键容器函数:

        连接数据库、准备语句、输入绑定表名,输出绑定字段名、输出绑定主键标记、执行查询主键字典语句、while中:获取结果集、从多表的多个主键字段比对当前表所有字段中同名字段、设置对应的标记

拼接插入语句函数:

        设置两个字符串和一个占位符变量、for(获取的容器内所有字段):第一个字符串除了upttime用逗号拼接各个字段名;匹配字段和keyid用序列化表述拼接字段值、比较date和字段用to_date表述拼接字段值、其余用占位符表述拼接字段值、占位符++,删除字符串1和字符串2的最后一个逗号、构建由字段名、字符串1、字符串2构成的语句;若需要更新则退出函数、否则设置拼接语句1(update %s)、遍历全部字段容器:拼接主键名、keyid以外的字段名、upttime字段名直接赋值为sysdate(不需要占位符)、其他字段判别是否为时间,时间用sformat和to_date(:占位符)来拼接,非时间用占位符、占位符++;删除最后一个逗号、for遍历全部字段的容器:如果是主键进一步判断是否为时间类型,是就用特殊格式占位,否则退出,其余非主键的跳过、占位符++;

绑定sql语句函数:

        为将要绑定的变量准备空间、连接数据库、准备语句(拼接好的字符串)、for(所有字段):不执行upttime字段和keyid字段、绑定参数、序列号++

执行预处理语句函数:

        若获取预处理sql语句长度为0说明不需要预处理sql,直接返回。连接数据库、连接命令行、准备预执行语句、执行语句

解析字段值函数:

        设置临时变量、for(所有字段):从buffer中比对字段名并将对应字段值存入临时变量、判断当前字段类型、从临时变量中挑选数字(字段值)、非时间类型是数字类型也是从临时变量中挑选数字、将字段对应的值保存到字段值容器中

http://www.xdnf.cn/news/18780.html

相关文章:

  • 类似ant design和element ui的八大Vue的UI框架详解优雅草卓伊凡
  • Vue中的scoped属性
  • 推荐系统王树森(三)粗排精排
  • 【NER学习笔记】:基于AdaSeq的NER模型训练笔记
  • Linux下TCPT通信
  • 8.26 支持向量机
  • 什么样的 IP 能穿越周期,持续被用户买单?​
  • 基于大模型的智能占卜系统实战-Qwen-VL、RAG、FastAPI
  • “喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
  • Python编程快速上手—让繁琐工作自动化
  • OpenCV打开视频函数VideoCapture使用详解
  • 数据与端点安全 (Protect data and apps)
  • 【学习笔记】系统时间跳变会影响time接口解决措施
  • Matlab使用——开发上位机APP,通过串口显示来自单片机的电压电流曲线,实现光伏I-V特性监测的设计
  • es-toolkit 是一个现代的 JavaScript 实用库
  • UE4生成Target文件
  • 【RAGFlow代码详解-11】知识库管理
  • 无人机倾斜摄影农田航线规划
  • ProfiNet 转 Ethernet/IP基于西门子 S7 - 1500 与罗克韦尔 PLC 的汽车零部件加工线协同案例
  • 【QT学习之路】-Qt入门
  • 解决Windows更新后WPF程序报TypeLoadException异常的问题
  • Node.js(3)—— fs模块
  • 3D游戏角色建模资源搜索指南(资料来源于网络)
  • 恒坤新材科创板IPO上市关注,致力推动集成电路材料国产化
  • 领克08 EM-P新款官图发布,外观微调并增激光雷达
  • CentOS 7 服务器初始化完整流程
  • WhisperLiveKit:实时语音转文本
  • Vue3核心概念之构造函数和普通函数
  • Dify智能体平台二次开发笔记(10):企业微信5.0 智能机器人对接 Dify 智能体
  • LeetCode - 20. 有效的括号