【问题标题】:Create List \ ArrayList from query从查询创建 List \ ArrayList
【发布时间】:2021-10-08 05:44:10
【问题描述】:

实体

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Immutable
@Entity
@Table(name = "payments")
public class ClientEntity {

    @Id
    private Long id;

    @Column(name = "created_dt")
    private LocalDate created_dt;

    @Column(name = "username")
    private String username;

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

    @Column(name = "amount")
    private Integer amount;

    @Column(name = "status")
    private String status;

    @Column(name = "account")
    private String account;

    @Column(name = "external_id")
    private String external_id;

    @Column(name = "external_status")
    private String external_status;
}

服务

@Component
public class SchedulerService {

    @Autowired
    //private final AttachmentEmail attachmentEmail;
    private final JdbcTemplate jdbc;

    private static final String QUERY = "SELECT pp.id, pp.created_dt, au.username, ss.name, pp.amount,\n" +
            "REPLACE(pp.status, 'SUCCESS', 'Success') AS status, pp.account,\n" +
            "pp.external_id, COALESCE(pp.external_status, null, 'Indefined') AS external_status\n" +
            "FROM payments AS pp\n" +
            "INNER JOIN auth_user AS au ON au.id = pp.creator_id\n" +
            "INNER JOIN services AS ss ON ss.id = pp.service_id\n" +
            "WHERE pp.created_dt::date = (CURRENT_DATE - INTERVAL '1' day)::date\n" +
            "AND ss.name = 'SomeName' AND pp.status = 'SUCCESS'";

private static final DateTimeFormatter date_format = DateTimeFormatter.ofPattern("dd.MM.yyyy");
    private static final DateTimeFormatter time_format = DateTimeFormatter.ofPattern("HH:mm:ss");

    public SchedulerService(AttachmentEmail attachmentEmail, JdbcTemplate jdbc) {
        //this.attachmentEmail = attachmentEmail;
        this.jdbc = jdbc;
    }

    @Scheduled(fixedRate = 20000)
    public void sendMail() {
        String filename = "select.csv";
        try (FileWriter writer = new FileWriter(filename)) {

            writer.append("id|Data|Time|Initiator|Service|Amout|Payment Status|Props|Identifier|External status").append("\n");

            this.jdbc.query(QUERY, (ResultSet rs) -> writeLine(writer, rs));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

private void writeLine(FileWriter writer, ResultSet rs) {
        try {
        LocalDateTime ldt = rs.getTimestamp("created_dt").toLocalDateTime();
        writer.append(String.valueOf(rs.getLong("id")));
        writer.append('|');
        writer.append(ldt.format(date_format));
        writer.append('|');
        writer.append(ldt.format(time_format));
        writer.append('|');
        writer.append(rs.getString("username"));
        writer.append('|');
        writer.append(rs.getString("name"));
        writer.append('|');
        writer.append(String.valueOf(rs.getBigDecimal("amount")));
        writer.append('|');
        writer.append(rs.getString("status"));
        writer.append('|');
        writer.append(rs.getString("props"));
        writer.append('|');
        writer.append(rs.getString("Identifier"));
        writer.append('|');
        writer.append(rs.getString("external_status"));
        writer.append('\n');
        } catch (Exception e) {
            throw new IllegalStateException(e);
        }
    }
}

我通过邮件发送请求数据,之前已在 csv 文件中形成了这些数据。但是,为了使这些数据正确,我需要将来自两个数据库的两个查询相互比较。在我上面指出的示例中,只有一个请求。我的想法是我想将我的 SELECT 存储在一个集合(List、ArrayList)中,然后我将通过比较器将这两个对象相互比较。找不到如何将上述 SELECT 转换为 List / ArrayList

【问题讨论】:

  • @M. Deinum 我使用了您的提示,也想将 QUERY 转换为 List。你能告诉我怎么做吗?

标签: postgresql spring-boot pgadmin


【解决方案1】:

要比较两个结果集是否相等,可以使用集合操作:

WITH q1 AS (/* first SELECT */),
     q2 AS (/* second SELECT */)
SELECT NOT EXISTS (SELECT * FROM q1 EXCEPT SELECT * FROM q2)
   AND NOT EXISTS (SELECT * FROM q2 EXCEPT SELECT * FROM q1);

这将测试第一个结果集中是否有任何行不在第二个结果集中,反之亦然。如果两者都不是,则两个结果集必须相同。

【讨论】:

  • 事实是我有来自两个数据库的请求,请求时出错。所以我认为需要将SELECT转换为对象然后比较对象
  • 那么这根本不是数据库问题,您将不得不比较客户端代码中的结果集。
猜你喜欢
  • 2020-11-07
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多