我在 java 中有一段很长的代码,它使用 selenium webdriver 和 firefox 来测试我的网站。如果我不能在这里重现它,请原谅我。它有一个无限的while循环来重复执行它的功能。这就是它应该做的。另外,我不使用多线程。
有时,它会卡住。我使用 Windows 系统,代码在命令提示符下运行。当它卡住时,不会抛出任何错误或异常。它类似于“它挂起”(只有运行代码的窗口挂起)。然后我必须使用 CTRL + C 。有时它会在那之后恢复工作,有时它会被终止,然后我重新启动它。它工作正常,但经过一些循环后,它再次“挂起”。另外,我注意到它通常在执行查询 mysql 数据库的方法之一期间。
代码运行一个无限循环。每次,它都会查询 mysql 数据库,从特定表(每个循环中的一个值)中获取一个值(其“状态”字段不是“完成”)并继续使用该值进行测试。在循环结束时,表已更新(该值的“状态”列设置为“完成”)。当该特定表中没有“状态”不等于“完成”的新值时,理想情况下应该显示“没有新值”。然而,在所有的值都被使用之后,它只会占用最后使用的值(即使它的状态在前一个循环结束时更新为“完成”)并继续。然后我必须终止执行并再次运行代码。这次无限循环开始时,它查询数据库并正确显示“
我使用 con.close() 关闭 sql 连接。
似乎在运行循环几次后,某些资源在某处被耗尽。但这只是一个疯狂的猜测。
任何人都可以提出问题是什么,我该如何解决?
下面是一段相关的代码:
try{
String sql = "select something from somewhere where id = ? and is_deleted = '0';";
System.out.println("\n"+sql + "\n? = " + pID);
PreparedStatement selQuery1 = conn.prepareStatement(sql);
selQuery1.setString(1, pID);
ResultSet rs1 = selQuery1.executeQuery();
//Extract data from result set
while(rs1.next() && i1<6){
//do something
}//end while loop
String sql2 = "select something2 from somewhere2 where id = ? and is_deleted = '0';";
System.out.println("\n"+sql2 + "\n? = " + pjID);
PreparedStatement selQuery2 = conn.prepareStatement(sql2);
selQuery2.setString(1, pjID);
ResultSet rs2 = selQuery2.executeQuery();
//Extract data from result set
while(rs2.next() && i1<6){
//do something
}//end while loop
System.out.println("\nDone.");
conn.close();
}catch (SQLException e) {
flag=false;
}
请注意,任何地方都不会抛出异常。在显示两个查询语句后,运行代码的窗口会冻结(偶尔也会冻结) 。