java - 如何在 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 都移到Completed
Status。
解决方案
我可以在这里提供部分答案。如果您只想了解有多少员工处于已完成状态,您应该使用以下查询:
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"));
}
推荐阅读
- javascript - 使用 Babylon.JS 在循环内停止/重新启动动画
- angular - 在量角器中断言异常的最高效方式?
- r - 如何删除小标题的第一行
- php - PHP 中的这个 CURL 调用有什么问题?
- reactjs - 当 API 发布成功时,发送一个 get 请求 - React/Redux
- c++ - 使用 std::ios::sync_with_stdio(fasle) 打印输出时,在 Valgrind 的泄漏摘要中获得“仍然可以访问”
- r - 交易数据的 3d 散点图
- java - 升级到版本 2019.3 (CE) 后无法解析 Intellij 中的插件
- json - 如何从烧瓶 url 加载数据并控制台记录数据 n 反应?
- android - 如何让 RxKotlin 编写的这段代码更干净,避免阻塞线程?