删除 Java 结果集中的重复行



我是Java的初学者,我在打印重复行时遇到问题。我有这个代码:

while (rs.next()) {
String curr_crn = rs.getString(2);
while(rs.next()) {
if(curr_crn != rs.getString(2)) {
String instructor = getInstructor(connection, 
rs.getString(1),rs.getString(2));
String student = getStudent(connection,rs.getString(2));
detailLines.add(Library.rPad(rs.getString(1), COL1, ' ')
+ Library.rPad(rs.getString(2), COL2, ' ')
+ Library.rPad(rs.getString(3) + " " + rs.getString(4) + 
" " +rs.getString(5), COL3, ' ')
+ Library.rPad(instructor, COL4, ' ')
+ newline
+ Library.rPad(student, COL1 ,' '));
}
}
}

如何将当前crn与其他crn进行比较,以免打印重复项?

谢谢!

内部 while 循环可以删除,因为它会使代码变得复杂。 您可以创建 HashSet 对象。然后,您可以在 while 循环中启动,并在打印详细信息后将current_crn存储在每次迭代的最后一行的集合中。 代码应类似于以下内容:

HashSet hs = new HashSet();
while (rs.next()) {
String curr_crn = rs.getString(2);
if( ! hs.contains(curr_crn) ) {
String instructor = getInstructor(connection, 
rs.getString(1),rs.getString(2));
String student = getStudent( connection, 
rs.getString(2));
detailLines.add(Library.rPad(rs.getString(1), 
COL1, ' ')
+ Library.rPad(rs.getString(2), COL2, ' ')
+ Library.rPad(rs.getString(3) + " " + 
rs.getString(4) + " " +
rs.getString(5), COL3, ' ')
+ Library.rPad(instructor, COL4, ' ')
+ newline
+ Library.rPad(student, COL1 ,' '));
hs.add(curr_crn);
}
}

选择"不同",您将不会收到重复的元素

我的第一个想法是查看SQL查询并分析为什么有重复项。 既然你说查询对你来说是不可触碰的,我们将假设它只返回它必须返回的内容。

在这种情况下,我建议您将数据访问与逻辑分开。 数据就是数据,我们假设它们是可以的:只需将它们作为 bean 列表返回即可。 这是我们的数据层(有些人称之为模型(。

现在我们的目标是呈现没有重复的数据。 另一个构成我们的表示层(有些人称之为视图(的类可以执行此过滤器。 例如,这里有一个关于如何使用添加到 Java 8 的流过滤列表中的重复项的说明:https://www.baeldung.com/java-remove-duplicates-from-list

我希望你觉得这有用。

在获取值之前,在查询中,您可以使用 DISTINCT

SELECT DISTINCT column1, column2, ... FROM table_name;

选择"不同"仅返回不同(不同(值。 选择"不同"可消除结果中的重复记录。 DISTINCT 可以与聚合一起使用:计数、平均、最大等。

你也可以尝试哈希,就像这样:HashSet 如何不允许重复?

使用哈希集存储唯一的 crn,并且仅在当前 crn 在哈希集中不存在时才处理行

Set<String> uniqueCrns = new HashSet<>();
while (rs.next()) {
String curr_crn = rs.getString(2);
// check for duplicates
if (uniqueCrns.contains(curr_crn)) {
continue;
}
// the curr_crn is unique add it to the unique set and process it
uniqueCrns.add(curr_crn);
String instructor = getInstructor(connection,
rs.getString(1),rs.getString(2));
String student = getStudent(connection,rs.getString(2));
detailLines.add(Library.rPad(rs.getString(1), COL1, ' ')
+ Library.rPad(rs.getString(2), COL2, ' ')
+ Library.rPad(rs.getString(3) + " " + rs.getString(4) +
" " +rs.getString(5), COL3, ' ')
+ Library.rPad(instructor, COL4, ' ')
+ newline
+ Library.rPad(student, COL1 ,' '));
}

最新更新