站点数据上传,现在就是站点检测的数据上传数据库

站点数据入库,注意此时是站点数据入库

debug参数

        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/idc1/bin/obtmindtodb",
            "args": ["/idcdata/surfdata" ,"127.0.0.1,root,mysqlpwd,mysql,3306" ,"utf8", "/log/idc/obtmindtodb.log"],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }

程序运行参数

  • 首先,上传的文件,现在和刚刚的站点参数文件不一样了,他现在是有多个文件的,不只有一个文件,而是多个文件,所以提供一个目录,代表上传的文件都放在哪里?
  • 数据库连接参数
  • 数据库的字符集
  • 日志文件

主要流程

  • 打开日志
  • 开始工作

_obtmindtodb() 上传文件夹中的文件

流程
  • 打开文件夹
  • 将文件夹中的每个文件读出来,这里面文件类型不仅仅有xml还有csv格式,根据格式对一个文件进行解析,并解析到结构中,最终绑定到结构体中,上传。
  • 将每个文件往数据库去存放
  • 其实还是刚刚那个逻辑,不过现在,是针对于一个文件中所有的文件,而不是刚刚的只有一个的文件。但是逻辑还是一样的。
    拿一个文件出来,将文件的每一条数据解析到专用数据结构中,从而通过专用的数据结构上传,但是记住此时的文件有可能是csv结构,所以要进行处理。
while(true)
{
	//读取一个文件出来
	while(文件读取每一行)
	{
		//如果该文件读取结束,break
		//将读取的那一行解析到上传的结构体中,那个结构体和语句已经绑定好了
		//所以你要将你读取的数据解析到那个结构体就行,这样那个类对象可以上传
		//你获得是数据,但是你的数据不一定可以直接上传,所以要通过专业的数据
		//接口上传,所以,你要将你的数据解析到那个数据接口,才可以上传数据
		//通过类对象上传
	}
	//删除已经上传完成的文件
	//统计
	//提交事务
}

读取文件的每一行------->解析到上传的结构体之中------->上传

处理类CZHOBTMIND

说明,该类用于上传一个文件的数据到数据库中。

  • 成员对象:数据库连接对象
  • 日志对象
  • 插入表的SQL语句句柄
  • 你从文件中读取的一行,把他传送给他,要对他进行解析。但是这里是不是有点多余?这里是将执行的结果产生的结果的反馈给类去管理,即插入失败后,写入日志的时候要使用,到底是那一条数据插入失败了。所以要这个对象,其实没啥用,只是后来做功能的时候发现确实要。
  • 最终用于上传数据的数据对象
  • 这样,插入一条数据的职责交给一个类,你要在上传一条数据的时候,使用类的接口从而将改数据解析成统一接口,最后通过类上传。这个文件的每一条数据都这么上传知道这个文件结束,接着下一个文件。
SplitBuffer(char *strBuffer,bool bisxml)

该函数根据你传进来的一行数据,并且文件的格式,将给数据解析成接口数据结构,从而上传数据。

InsertTable()

生成上传的SQL 语句,上传到数据库。只管上传,如果有重复上传失败,那就把重复的数据写到日志文件中。这里不会,为什么呢?是因为,同一时间的天气数据是不可能有相同的,你这样的重复就是错误,直接忽略就行,但是其他的错误就不能局略,需要记录下,并且这个职责给了这个类,所以才要那个看起来没啥用的“一行数据对象”。

class CZHOBTMIND
{
public:
  connection  *m_conn;     // 数据库连接。
  CLogFile    *m_logfile;  // 日志。

  sqlstatement m_stmt;     // 插入表操作的sql。

  char m_buffer[1024];   // 从文件中读到的一行。
  struct st_zhobtmind m_zhobtmind; // 全国站点分钟观测数据结构。

  CZHOBTMIND();
  CZHOBTMIND(connection *conn,CLogFile *logfile);

 ~CZHOBTMIND();

  void BindConnLog(connection *conn,CLogFile *logfile);  // 把connection和CLogFile的传进去。
  bool SplitBuffer(char *strBuffer,bool bisxml);  // 把从文件读到的一行数据拆分到m_zhobtmind结构体中。
  bool InsertTable();  // 把m_zhobtmind结构体中的数据插入到T_ZHOBTMIND表中。
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值