ArrayList 重复数据库中的相同数据? [复制]
Posted
技术标签:
【中文标题】ArrayList 重复数据库中的相同数据? [复制]【英文标题】:ArrayList repeats the same data from a database? [duplicate] 【发布时间】: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;
【问题讨论】:
在其他 SQL 客户端应用程序中执行 SQL 语句时是否得到不同的结果? ***.com/questions/28995533/… , ***.com/questions/7080546/… 【参考方案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 语句中以上是关于ArrayList 重复数据库中的相同数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
慎用ArrayList的contains方法,使用HashSet的contains方法代替
将 HashMap 转换为具有相同排序的 ArrayList [重复]
用Java中的ArrayList实现:去除集合中字符串的重复值(字符串的内容相同)