java在结果集中嵌套while循环

时间:2014-03-07 01:02:19

标签: java jdbc while-loop resultset

我想合并2 resultSet的结果,这是sql查询返回的结果。实现这一目标的最佳方法是什么?

我的计划是删除2个结果集以打印出两个结果集的最终结果。两个结果集都具有相同的id列,这是它们的第一列。但对于内部while循环,我只打印出第一个值。

我认为当匹配时,它会打印第二个结果集中的值,然后退出循环。然后当有另一场比赛时,它会再次打印出该值。

while (set1.next())
{
    System.out.print("Id: "+set1.getInt(1)+", Name: "+set1.getString(2));

    while (set2.next())
    {
        if (set1.getInt(1)==(set2.getInt(1)))
        {  
            System.out.print(", Alias: "+set2.getString(2);
            break;
        }
    }

    System.out.println();
}

编辑:

ResultSet set1: 
id | name
1  | A
2  | B
3  | C
...

ResultSet set2:
id | alias
1  | F
2  | G
2  | H

我想打印出来:

Id: 1, Name: A, Alias: F
Id: 2, Name: B, Alias: G, H

仅供参考,两组中的id按升序排列

2 个答案:

答案 0 :(得分:1)

以下循环仅对外循环执行一次

        while (set2.next()){
            if (set1.getInt(1)==(set2.getInt(1))){  
                System.out.print(", Alias: "+set2.getString(2);
                break;
            }
        }

每次执行外部循环时,都需要重新初始化迭代器。

答案 1 :(得分:0)

由于两个结果集具有相同的第一列(id),因此您可以从两个结果集的第一行开始。在内部循环中,迭代set2中的行,直到其id大于set1中的id。所以你可以这样做:

while (set1.next())
{
    System.out.print("Id: "+set1.getInt(1)+", Name: "+set1.getString(2));

    while (set2.next())
    {
        System.out.print(", Alias:");
        if (set1.getInt(1)==(set2.getInt(1)))
        {  
            System.out.print(set2.getString(2) + ", ");
            continue;
        } else {
            set2.previous();
            break;
        }
    }
    System.out.println();
}