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

解析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.dtcms.com/a/352464.html

相关文章:

  • 给高斯DB写一个函数实现oracle中GROUPING_ID函数的功能
  • 分布式锁;Redlock
  • 【世纪龙科技】职业院校汽车职业体验中心建设方案
  • imx6ull-驱动开发篇43——I.MX6U 的 I2C 驱动分析
  • 如何在ubuntu下制作linux镜像
  • 深度学习之卷积神经网络原理(cnn)
  • AT_abc401_f [ABC401F] Add One Edge 3
  • Rocky9配置完VMware桥接模式后没有自动获取IP
  • 系统架构设计师-【2025上半年论文题目分享】
  • 六足机器人系统设计与实现cad+设计说明书+电路原图模式+装配图+电路图
  • Java设计模式之《状态模式》
  • 从根源解决 VMware 每次重启 Windows 系统后无法进行复制文件等操作的问题
  • 矩阵的秩几何含义
  • openssh 版本回退
  • Spring Ai (Function Calling / Tool Calling) 工具调用
  • 78-dify案例分享-零基础上手 Dify TTS 插件!从开发到部署免费文本转语音,测试 + 打包教程全有
  • 使用【阿里云百炼】搭建自己的大模型
  • Linux网络设备分析
  • 构建绿色园区新方案:能源监测+用电安全的综合能源管理系统
  • LeetCode - 227. 基本计算器 II
  • C++ `std::map` 解析:`find`, `end`, `insert` 和 `operator[]`
  • redis 在 nodejs 中如何应用?
  • 常用 Kubernetes (K8s) 命令指南
  • DevSecOps 集成 CI/CD Pipeline:实用指南
  • 【RAGFlow代码详解-30】构建系统和 CI/CD
  • 【智能化解决方案】大模型智能推荐选型系统方案设计
  • 简明 | ResNet特点、残差模块、残差映射理解摘要
  • VGVLP思路探索和讨论
  • C++ 并发编程中的锁:总结与实践
  • 绝命毒师模拟器2|单机+联机+绝命毒师模拟器1 全DLC(Drug Dealer Simulator 2+1)免安装中文版