Синтаксический анализ файла Pipe и сохранение данных в БД с использованием Spring / Java - PullRequest
0 голосов
/ 13 марта 2020

У меня есть файл с разделителем каналов (excel xlsx), который мне нужно проанализировать для определенных данных. все данные находятся в столбце A. первая строка содержит дату, последняя строка содержит количество строк, и все, что находится между ними, представляет собой данные строки. Я хочу взять первые три поля каждой строки и дату из заголовка и сохранить ее в моей таблице H2. В моем файле есть дополнительные данные в каждой строке. Мне нужна помощь в создании кода, который будет анализировать файл и вставлять его в мою базу данных. У меня есть сущность и некоторый код, но я застрял.

Мой файл

20200310|
Mn1223|w01192|windows|extra|extra|extra||
Sd1223|w02390|linux|extra|extra|extra||
2

Моя таблица

DROP TABLE IF EXISTS Xy_load ;

CREATE TABLE Xy_load (
  account_name VARCHAR(250) NOT NULL,
  command_name VARCHAR(250) NOT NULL,
  system_name VARCHAR (250) NOT NULL,
  CREATE_DT date (8) DEFAULT NULL
);

класс сущностей

public class ZyEntity {

    @Column(name="account_name")
    private String accountName;

    @Column(name="command_name")
    private String commandName;

    @Column(name="system_name")
    private String systemName;

    @Column(name="CREATE_DT")
    private int createDt;

    public ZyEntity(String accountName, String commandName, String systemName){
        this.accountName=accountName;
        this.commandName=commandName;
        this.systemName=systemName;

    }

    public String getAccountName() {
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    public String getCommandName() {
        return commandName;
    }

    public void setCommandName(String commandName) {
        this.commandName = commandName;
    }

    public String getSystemName() {
        return systemName;
    }

    public void setSystemName(String systemName) {
        this.systemName = systemName;
    }

    public int getCreateDt() {
        return createDt;
    }

    public void setCreateDt(int createDt) {
        this.createDt = createDt;
    }

}

1 Ответ

0 голосов
/ 25 марта 2020

Я смог понять это с некоторой помощью

List<DataToInsert> parseData(String filePath) throws IOException {

        List<String> lines = Files.readAllLines(Paths.get(filePath));

        // remove date and amount
        lines.remove(0);
        lines.remove(lines.size() - 1);

        return lines.stream()
                .map(s -> s.split("[|]")).map(val -> new DataToInsert(val[0], val[1], val[2])).collect(Collectors.toList());
    }


public void insertZyData(List<ZyEntity> parseData) {
    String sql = "INSERT INTO Landing.load (account_name,command_name,system_name)"+
            "VALUES (:account_name,:command_name,:system_name)";

    for (ZyEntity zyInfo : parseData){
        SqlParameterSource source = new MapSqlParameterSource("account_name", zInfo.getAccountName())
                .addValue("command_name", zyInfo.getCommandName())
                .addValue("system_name", zyInfo.getSystemName());
        jdbcTemplate.update(sql, source);
    }
}

...