javaarraylist一直重复值,直到数组结束

c90pui9n  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(266)

我想用下面的代码在arraylist中循环。我得到了一个循环,所有的参数都显示出来了。但它一直在重复,直到sql数据库结束。

ArrayList<Ews> controles = new ArrayList<>(); 
    try {
        Connection conn = DriverManager.getConnection(url, username, password);

        String query = "SELECT * FROM " + database + ".controle";
        java.sql.Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery(query);

        while (rs.next()) {
            int id = rs.getInt("id");
            if (nr == id) {   
                Ews x = new Ews(rs.getString("datum"), rs.getInt("systole"), rs.getInt("diastole"), + 
                rs.getInt("pols"), rs.getDouble("temperatuur"));                 
                controles.add(x);
                Integer i = 1;
                for (Ews controle : controles) {
                    System.out.println(i  + ") " + controle.getDate() + 
                    " - Bloeddruk: " + controle.getSyst() + "/" + controle.getDiast() +
                    " - Pols: " + controle.getPulse() + " - Temperatuur: " + controle.getTemp());
                    i++;
                }
            }
        } 

    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}

我得到了这个结果。

1)  - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 38.0
1)  - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 38.0
2)  - Bloeddruk: 130/60 - Pols: 32 - Temperatuur: 38.0
1)  - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 38.0
2)  - Bloeddruk: 130/60 - Pols: 32 - Temperatuur: 38.0
3)  - Bloeddruk: 123/60 - Pols: 89 - Temperatuur: 38.0
1)  - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 38.0
2)  - Bloeddruk: 130/60 - Pols: 32 - Temperatuur: 38.0
3)  - Bloeddruk: 123/60 - Pols: 89 - Temperatuur: 38.0
4) null - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 36.0
1)  - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 38.0
2)  - Bloeddruk: 130/60 - Pols: 32 - Temperatuur: 38.0
3)  - Bloeddruk: 123/60 - Pols: 89 - Temperatuur: 38.0
4) null - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 36.0
5) 24-11-2020 13:12 - Bloeddruk: 120/60 - Pols: 61 - Temperatuur: 36.0
1)  - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 38.0
2)  - Bloeddruk: 130/60 - Pols: 32 - Temperatuur: 38.0
3)  - Bloeddruk: 123/60 - Pols: 89 - Temperatuur: 38.0
4) null - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 36.0
5) 24-11-2020 13:12 - Bloeddruk: 120/60 - Pols: 61 - Temperatuur: 36.0
6) 24-11-2020 13:16 - Bloeddruk: 160/61 - Pols: 68 - Temperatuur: 36.0

// And so on...

但我想要这个结果

1)  - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 38.0
2)  - Bloeddruk: 130/60 - Pols: 32 - Temperatuur: 38.0
3)  - Bloeddruk: 123/60 - Pols: 89 - Temperatuur: 38.0
4) null - Bloeddruk: 120/60 - Pols: 60 - Temperatuur: 36.0
5) 24-11-2020 13:12 - Bloeddruk: 120/60 - Pols: 61 - Temperatuur: 36.0
6) 24-11-2020 13:16 - Bloeddruk: 160/61 - Pols: 68 - Temperatuur: 36.0

// and so on...

我希望你们能理解我的问题并知道如何解决:)

ffscu2ro

ffscu2ro1#

将for循环移到while循环之外。
谢谢@griffeydog

amrnrhlw

amrnrhlw2#

问题是你要建立你的列表,然后迭代它。您需要首先完成列表的构建,然后使用输出进行迭代。

while (rs.next()) {
        int id = rs.getInt("id");
        if (nr == id) {   
            Ews x = new Ews(rs.getString("datum"), rs.getInt("systole"), rs.getInt("diastole"), + 
            rs.getInt("pols"), rs.getDouble("temperatuur"));                 
            controles.add(x);
       }
}

Integer i = 1;
for (Ews controle : controles) {
     System.out.println(i  + ") " + controle.getDate() + 
     " - Bloeddruk: " + controle.getSyst() + "/" + controle.getDiast() +
     " - Pols: " + controle.getPulse() + " - Temperatuur: " + controle.getTemp());
     i++;
}

以上纯粹是回答你的循环问题希望这有帮助。

相关问题