jsp中数据库的多层while循环嵌套查…

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>");   
}
此代码利用数据库中的多表连接查询,一切的结果在数据库中,所以只要你的数据库够健壮,对你的后台代码执行要求会大大降低,而且执行速率会有所提高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值