【问题标题】:ArrayList repeats the same data from a database? [duplicate]ArrayList 重复数据库中的相同数据? [复制]
【发布时间】:2015-08-25 00:46:50
【问题描述】:

我有一个使用 ArrayList 从数据库加载数据的 JTable,但我有一个问题,即相同的数据不断重复。 我在这里想念什么?提前谢谢,

    private void AllTicketRecords() {
    try {
        TicketRecordDao ticketrecdao = new TicketRecordDao();

        ArrayList<TicketRecord> records = ticketrecdao.getAllTicketsRecords();


        Object[] tableColumnName = new Object[7];

        tableColumnName[0] = "Date";
        tableColumnName[1] = "H.License";
        tableColumnName[2] = "First Name";
        tableColumnName[3] = "Last Name";
        tableColumnName[4] = "Ticket ID";
        tableColumnName[5] = "Violation";
        tableColumnName[6] = "Cost";

        DefaultTableModel tbd = new DefaultTableModel();

        tbd.setColumnIdentifiers(tableColumnName);

        this.TicketsSummaryTable.setModel(tbd);

        Object[] RowRec = new Object[7];

        for (int i = 0; i < records.size(); i++) {

            RowRec[0] = records.get(i).getDATE();
            RowRec[1] = records.get(i).getEMP_ID();
            RowRec[2] = records.get(i).getFNAME().toUpperCase();
            RowRec[3] = records.get(i).getLNAME().toUpperCase();
            RowRec[4] = records.get(i).getTICKET_ID();
            RowRec[5] = records.get(i).getVIOLATION();
            RowRec[6] = nf.format(records.get(i).getCOST());

            tbd.addRow(RowRec);

        }
    } catch (SQLException e) {
        System.out.println(e.toString());
    }

}


public ArrayList<TicketRecord> getAllTicketsRecords() throws SQLException {

    String sql = "SELECT DATE, T.EMP_ID ,E.FNAME, E.LNAME ,TICKET_ID, VIOLATION, COST"
            + " FROM EMPLOYEE E INNER JOIN TICKET T ON E.EMP_ID = E.EMP_ID"
            + " ORDER BY DATE";
    DBConnection con = new DBConnection();
    Connection connect = con.getConnection();
    Statement stm = null;
    ArrayList<TicketRecord> records = new ArrayList<>();

    try {
        stm = connect.createStatement();
        ResultSet rs = stm.executeQuery(sql);

        while (rs.next()) {

            TicketRecord tickterec = new TicketRecord();

            tickterec.setDATE(rs.getString("DATE"));
            tickterec.setEMP_ID(rs.getInt("EMP_ID"));
            tickterec.setFNAME(rs.getString("FNAME"));
            tickterec.setLNAME(rs.getString("LNAME"));
            tickterec.setTICKET_ID(rs.getString("TICKET_ID"));
            tickterec.setVIOLATION(rs.getString("VIOLATION"));
            tickterec.setCOST(rs.getDouble("COST"));

            records.add(tickterec);

        }

    } catch (SQLException e) {
        System.out.println("" + e.toString());

    } finally {
        if (connect != null) {
            connect.close();
        }
        if (stm != null) {
            stm.close();
        }
    }
    return records;

}

【问题讨论】:

标签: java swing jdbc


【解决方案1】:

您的问题的主要原因似乎与...有关。

Object[] RowRec = new Object[7];
for (int i = 0; i < records.size(); i++) {

    RowRec[0] = records.get(i).getDATE();

基本上,您使用的是 RowRec 的相同实例,但只是更改了数组的元素,这将影响所有其他先前添加的行。

相反,为每一行创建一个 RowRec 的新实例...

for (int i = 0; i < records.size(); i++) {
    Object[] RowRec = new Object[7];
    RowRec[0] = records.get(i).getDATE();

我还会验证您的数据库结果,以确保没有任何重复项;)

在一个侧节点上,我将简单地创建一个自定义TableModel,从AbstractTableModel 之类的东西扩展,它可以直接使用TicketRecord,而不是分解DefaultTableModel 的现有记录值,但那是我

【讨论】:

  • 我确实在 for 循环中创建了一个新实例,但我得到了与以前相同的结果,我不知道我缺少什么,我在搜索按钮下有相同的代码,它工作正常,当我输入票证 id/emp id 它只给我我想要的记录,没有重复
  • 转储查询的结果,查询实际上可能返回重复项
  • 谢谢你,我知道它现在可以正常工作了。问题出在 SQL 语句中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
相关资源
最近更新 更多