gly = sql.executeQuery("select yh.yhid,yh.yhmc,rctime.rctime,rctime.rclx,rctime.rcsj from rctime, yh where yh.yhid=rctime.yhid");
while (gly.next()) {
String yhid=gly.getString("yhid").trim();
String yhmc=gly.getString("yhmc").trim();
jg = sql.executeQuery("select rctime,rclx,rcsj from rctime where yhid='"+yhid+"'");
while(jg.next())
{
String yhmc=gly.getString("yhmc").trim();
out.print("<tr>");
out.print("<td align='center'>" +yhmc + "</td>");
out.print("<td align='center'>" + jg.getString("rctime") + "</td>");
out.print("<td bgcolor='#ff22'>" + "【"+jg.getString("rclx")+"】" +" "+ jg.getString("rcsj")+ "</td>");
out.print("</tr>");
}
}
由此代码可以看出while的循环嵌套中需要实现通过gly每查出一层数据,jg就会循环查询并显示全部符合条件的结果,可是代码运行结果却是不论gly有几条结果,始终只查询第一条而且至此一条。原因在于gly和jg都为全局变量,当jg循环数据取完后,应当再次循环gly,可是此时jg数据已取完,后面的循环就会取不到;按此循环语句,每次循环都需要移动jg的游标,如果数据库中数据较多,则游标移动太多开销太大!
如果代码改为下面的,则运行结果正确
gly = sql.executeQuery("select yh.yhid,yh.yhmc,rctime.rctime,rctime.rclx,rctime.rcsj from rctime,yh where yh.yhid=rctime.yhid");
while (gly.next()) {
String yhmc=gly.getString("yhmc").trim();
out.print("<tr>");
out.print("<td align='center'>" +yhmc + "</td>");
out.print("<td align='center'>" + gly.getString("rctime") + "</td>");
out.print("<td bgcolor='#ff22'>" + "【"+gly.getString("rclx")+"】" +" "+ gly.getString("rcsj")+ "</td>");
out.print("</tr>");
}
此代码利用数据库中的多表连接查询,一切的结果在数据库中,所以只要你的数据库够健壮,对你的后台代码执行要求会大大降低,而且执行速率会有所提高。