首页 > 解决方案 > 如何在 Java 中执行 while 循环和 for 循环条件?

问题描述

我有一个场景,其中有 5 个员工 ID。我想检查这些 ID 的状态(状态也是我从数据库中获取的)。员工状态如下:

Completed, Waiting, Error.

首先,员工 id 会在一定时间内从 移动Waiting到。Complete将所有员工 ID 移至Complete状态后,我必须执行另一个查询(直到所有员工 ID 移至completed状态,我才能执行下一个查询)。

如果任何员工 ID 变为错误状态,我只需要显示他们的员工 ID。这是我尝试过的:

public void ValidateStatusQuery() throws Exception {
    int counter = 0;
    List<Integer> EmplyeeIDList= new ArrayList<Integer>(Arrays.asList(123,345,456,567))
    Class.forName(dbdriver);    
    con=DriverManager.getConnection(URL2,DB_UserName,DB_Password);
    log.info("Data base connection is established");
    int i=0;
    while(i++<EmplyeeIDList.size()) {
        if(counter==5)
            break;
        stmt = con.prepareStatement("select * from tb_Employee where EmployeeID=?");                    
        stmt.setInt(1,EmplyeeIDList.get(i));            
        rs3= stmt.executeQuery();
        while(rs3.next()) {             
            getCurrentStatus= rs3.getString("CurrentStatus");
            if(getCurrentStatusID.equals("1")) {
                log.info(+EmplyeeIDList.get(i) + " is in Completed Status");
                counter++;//Incrementing counter variable whenever employee id is in Completed Queue.
                System.out.println("Count is"+counter);
            } else if(getCurrentStatusID.equals("7")) {
                log.info(+EmplyeeIDList.get(i) + " is in Waiting Status");
                Thread.sleep(10000);
            } else if(getCurrentStatusID.equals("3")) {
                log.info(+EmplyeeIDList.get(i) + " is in Error Status");
            }
        }   //End of While rs loop      
    }
}

这是输出:

123 is in Waiting status
345 is in Waiting status
456 is in Waiting status
567 is in Waiting status

一旦完成,它就会退出while循环EmplyeeIDList.size()

预期的输出是:我想等到所有 caseids 都移到CompletedStatus。

标签: javadatabaseselenium

解决方案


我可以在这里提供部分答案。如果您只想了解有多少员工处于已完成状态,您应该使用以下查询:

SELECT COUNT(*) AS cnt
FROM tb_Employee
WHERE CurrentStatus = '1';

这是执行此操作的 Java 代码:

String sql = "SELECT COUNT(*) AS cnt FROM tb_Employee WHERE CurrentStatus = '1'";
PreparedStatement stmt = con.prepareStatement(sql);          
ResultSet rs = stmt.executeQuery();
if (rs3.next()) {             
    System.out.println("Number of completed employees: " + rs.getInt("cnt"));
}

您还可以运行类似的查询来查找处于已完成状态或其他状态的员工数量。此查询可以作为计划任务或线程的一部分调用。

编辑:这是将查询范围限制为仅特定员工列表的一种方法。

// given EmplyeeIDList
StringBuilder whereIn = new StringBuilder("(?");
for (int i=1; i < EmplyeeIDList.size(); ++i) {
    whereIn.append(", ?");
}
whereIn.append(")");
String sql = "SELECT COUNT(*) AS cnt FROM tb_Employee ";
sql += "WHERE CurrentStatus = '1' AND EmployeeID IN " + whereIn;
for (int i=1; i <= EmplyeeIDList.size(); ++i) {
    stmt.setInt(i, EmplyeeIDList.get(i-1); ++i);
}
PreparedStatement stmt = con.prepareStatement(sql);          
ResultSet rs = stmt.executeQuery();
if (rs3.next()) {             
    System.out.println("Number of completed employees: " + rs.getInt("cnt"));
}

推荐阅读