从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...


前言

现在是:2022年4月20日13:33:23

以前是怎么都没想到,我需要在服务器的nohup文件中找记录,然后往数据库里面更新。具体因为啥不提了,说多了都是愧啊~今天主要是分享一个java解析nohup文件提取关注的信息,然后添加到数据库中。

实现思路

刚开始我是直接将nohup文件中的信息手动复制出来,然后写了个insertsql语句,一条一条的往里面添加,结果发现有上千条,这么干不睡觉都加不进去多少,于是想到了找小杨和小于帮帮忙,无奈有点复杂,光给他两讲怎么加讲了半天,还不能保证他两会了,数据能加对。。。。。

后来想了个办法,将nohup文件先转换成txt文件,然后解析txt文件,根据关键字提取关键信息,拿到之后截取成固定字符串,通过jdbc的方式添加在数据库中。

  1. nohup文件的后缀改成txt
  2. 观察自己关注的数据的规律,尤其是前后有什么可以标识的,看了看,可以根据Parameters这个来解析。

  1. 因为很不规律,所以有单独查找了下(Timestamp),截取成一个字符串
  2. 本来想着按照逗号来将这个字符串中所有需要的信息截取到,依次添加到数据库中,结果发现有个字段是介绍,里面的值也有逗号,有中文的逗号,也有因为的逗号,这种方法看来行不通。
  3. 想办法查找(Stirng),全文替换成~,然后按照~查找,最后在截取,终于可行了。

实现代码

1.按照Parameters解析txt文件:

package com.ruoyi.web.controller.util;
 import com.ruoyi.system.domain.EquipmentRZ;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Scanner;
 /**
  * @author: muxiongxiong
  * @date: 2022年04月19日 上午 11:05
  * 公众号:雄雄的小课堂
  * 博客:https://blog.csdn.net/qq_34137397
  * 个人站:http://www.穆雄雄.com
  * 个人站:http://www.muxiongxiong.cn
  * @Description: 解析txt文件获取里面的数据
  * 最初解析的是nohup文件,现在改为解析txt文件
  * 将txt文件里面的内容,解析成对象,添加到认证器材表里去
  */
 public class ParseTXTFileUtils {
     public void parseTxt(){
         File file = new File("D:\\test3.txt");
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         if (!file.exists()) {
             System.out.println("节点基本信息文件未找到");
         }
         Scanner s = null;
         try {
             s = new Scanner(file);
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }
         while (true) {
             //文档中的内容
             String danci = s.next();
             if ("Parameters:".equals(danci)) {
                 //开始留存需要的数据.
                 String jixu = "";
                 int count = 0;
                 while (true) {
                     EquipmentRZ equipmentRZ = new EquipmentRZ();
                     String danci2 = s.next();
                     jixu += danci2;
                     if (danci2.indexOf("Timestamp") != -1) {
                         String sheng = s.next();
                         String shi = s.next();
                         String qu = s.next();
                         String renzheng = s.next();
                         String tupian = s.next();
                         String jieshuriqi = s.next();
                         jixu += sheng + shi + qu + renzheng + tupian + jieshuriqi;
                         //System.out.println("jixu========"+jixu);
                         //按照逗号分割
                         String[] split = jixu.split("~,");
                         //获取到的数据
                         try {
                             equipmentRZ.setId(Integer.parseInt(split[0]));
                             equipmentRZ.setName(split[1]);
                             equipmentRZ.setXinghao(split[2]);
                             equipmentRZ.setJianjie(split[3]);
                             equipmentRZ.setZhuangtai(split[4]);
                             equipmentRZ.setGongsi1(split[5]);
                             equipmentRZ.setGongsi2(split[6]);
                             equipmentRZ.setRealName(split[7]);
                             equipmentRZ.setLeixing(split[8]);
                             equipmentRZ.setGongsi3(split[9]);
                             //2016-11-3011:35:08.0(Timestamp),天津市
                             String shijian = split[10];
                             //按照逗号分割
                             String[] split1 = shijian.split(",");
                             //截取最后的(Timestamp)
                             int index = split1[0].lastIndexOf("(");
                             String kaishishijian = split1[0].substring(0, index);
                             //第9位后面加上空格
                             StringBuffer sb = new StringBuffer(kaishishijian);
                             sb.insert(10, " ");
                             equipmentRZ.setBeginDate(simpleDateFormat.parse(sb.toString()));
                             equipmentRZ.setSheng(split1[1]);
                             equipmentRZ.setShi(split[11]);
                             equipmentRZ.setJiedao(split[12]);
                             equipmentRZ.setRenzheng(split[13]);
                             equipmentRZ.setTupian(split[14]);
                             String jieshu = split[15] + " 00:00:00";
                             equipmentRZ.setEndDate(simpleDateFormat.parse(jieshu));
                             //System.out.println(equipmentRZ);
                         } catch (ParseException e) {
                             e.printStackTrace();
                         }
                         //调佣添加的方法 将数据添加到数据库
                         //已经执行完毕 2022年4月19日11:08:54
                        /* ZhiXingMysql zhiXingMysql = new ZhiXingMysql();
                         zhiXingMysql.saveEquipmentRZ(equipmentRZ);*/
                         break;
                     }
                 }
             }
         }
     }
}

2.由于字段太多了,所以封装了个实体类,字段如下:

/**
 * @author: muxiongxiong
 * @date: 2022年04月19日 0:25
 * 公众号:雄雄的小课堂
 * 博客:https://blog.csdn.net/qq_34137397
 * 个人站:http://www.穆雄雄.com
 * 个人站:http://www.muxiongxiong.cn
 * @Description: 类的描述
 */
public class EquipmentRZ {
    private Integer id;
    private String name;
    private String xinghao;
    private String jianjie;
    private String zhuangtai;
    private String gongsi1;
    private String gongsi2;
    private String gongsi3;
    private String realName;
    private String leixing;
    private Date beginDate;
    private String sheng;
    private String shi;
    private String jiedao;
    private String tupian;
    private String renzheng;
    private Date endDate;
  }

3.jdbc添加到数据库中的方法:

public void saveEquipmentRZ(EquipmentRZ equipmentRZ) {
        int success = 0,err=0;
        String sql = "INSERT INTO sys_rzequipment ( equipment_id,equipment_name, equipment_model, equipment_introduction,equipment_status, production_name, maintenance_name, installation_company_name,maintenance_people, equipment_type,  installation_date, installation_province, installation_city, installation_address,  equipment_img_url, create_time,date_come_from ) \n" +
                "VALUES(?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?)";
        Connection connection = null;
        PreparedStatement pStatement = null;
        try {
            connection = getConnection();
            pStatement = connection.prepareStatement(sql);
            pStatement.setInt(1, equipmentRZ.getId());
            pStatement.setString(2, equipmentRZ.getName());
            pStatement.setString(3, equipmentRZ.getXinghao());
            pStatement.setString(4, equipmentRZ.getJianjie());
            pStatement.setString(5, equipmentRZ.getZhuangtai());
            pStatement.setString(6, equipmentRZ.getGongsi1());
            pStatement.setString(7, equipmentRZ.getGongsi2());
            pStatement.setString(8, equipmentRZ.getGongsi3());
            pStatement.setString(9, equipmentRZ.getRealName());
            pStatement.setString(10, equipmentRZ.getLeixing());
            pStatement.setObject(11, equipmentRZ.getBeginDate());
            pStatement.setString(12, equipmentRZ.getSheng());
            pStatement.setString(13, equipmentRZ.getShi());
            pStatement.setString(14, equipmentRZ.getJiedao());
            pStatement.setString(15, equipmentRZ.getTupian());
            pStatement.setObject(16, equipmentRZ.getEndDate());
            pStatement.setString(17, equipmentRZ.getRenzheng());
            int count = pStatement.executeUpdate();
            if(count>0){
                success++;
                System.out.println("成功:"+success+"==="+equipmentRZ.getId());
            }else{
                err++;
                System.out.println("失败:"+err+"===="+equipmentRZ.getId());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closePreparedStatement(pStatement);
            closeConnection(connection);
        }
    }

最后运行main方法就可以了。、

注意事项

  • 为了保险起见,刚开始测试的时候测试添加的数据尽量的少点儿,也就是将txt重新复制出来一份,只留几条记录,执行一遍main方法,观察一下数据库中的数据是否正确。
  • 执行的过程中可能会遇到错误,因为Parameters可能在登录操作的时候也会出现,所以遇到不是添加的sql的话,也会报错的,只需要将原来执行过的删掉,不规则的Parameters数据在txt文件中删掉继续执行即可。
  • 数据库一定要备份!!!
目录
相关文章
|
1月前
|
监控 关系型数据库 数据库
OceanBase数据库常见问题之文件存在但是数据库提示文件不存在如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
1月前
|
存储 Oracle 关系型数据库
Dataphin常见问题之想要周期执行任务如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
3天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
9天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
17 1
|
10天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为'张三',`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, '张三', 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES ('张三', 20)`。
13 2
|
10天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
9 2
|
16天前
|
人工智能 Cloud Native 算法
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
AI与云数据库的深度结合是数据库发展的必然趋势,基于AI能力的加持,云数据库未来可以实现更快速的查询和决策,帮助企业更好地利用海量数据进行业务创新和决策优化。
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
|
7天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
43 2
|
23天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
105 0
|
23天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)

热门文章

最新文章