在Java结果集中删除重复的行

时间:2018-10-16 14:22:33

标签: java sql

我是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进行比较,以免重复打印?

谢谢!

5 个答案:

答案 0 :(得分:1)

内部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);
          }
       }

答案 1 :(得分:0)

选择“不重复”,您将不会收到重复的元素

答案 2 :(得分:0)

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

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

SELECT DISTINCT仅返回不同的(不同的)值。 SELECT DISTINCT从结果中消除重复的记录。 DISTINCT可以与以下总计一起使用:COUNT,AVG,MAX等。

您也可以尝试使用哈希,例如:How does HashSet not allow duplicates?

答案 3 :(得分:0)

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

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

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

我希望您觉得这有用。

答案 4 :(得分:0)

使用HashSet来存储唯一的crn,并且仅当HashSet中不存在当前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 ,' '));

    }