Register temp = registerOp.getCaseInfo(rid);
%>
编辑
删除
查看详细
<%
++index;
}
%>
注意这一段代码:
[java script]
Collection registerId = conferenceRegisterAssignOp.getRegisterIdByConferenceId(Integer.parseInt(request.getParameter("cid")));
Iterator it = registerId.iterator();
int index = 1;
while (it.hasNext()) {
Integer integer = (Integer)it.next();
int rid = integer.intValue();
Register temp = registerOp.getCaseInfo(rid);
这里边先根据cid(培训会议表id)取到了参加本次会议的注册人员的id列表。
[java script]
Collection registerId = conferenceRegisterAssignOp.getRegisterIdByConferenceId(Integer.parseInt(request.getParameter("cid")));
然后再遍历这个列表,对每一个注册人员id,都取出这个人员的详细信息。
[java]
Register temp = registerOp.getCaseInfo(rid);
这样在报名的数量达到200条的时候运行起来的时间大约为40s到70秒s。由于这个页面的table中的行tr是在后台逐条生成的,再Collection遍历是陆陆续续发送到浏览器的,这样会使浏览器等待页面的时间太长,导致浏览器与后台Web Server的连接超过TimeOut时长,断开连接。反应到前端浏览器的现象就是页面的前半部分加载完成,列表没有全部加载出来。
改进的代码:
原因分析清楚之后,我们需要改进这个查找机制,需要把这两次操作合并到一次SQL查询中完成,让SQL在后台一次就把我们需要的注册人员的详细信息查询出来。
[java]
Collection registers = conferenceRegisterAssignOp.getRegistersByConferenceId(Integer.parseInt(request.getParameter("cid")));
Iterator it = registers.iterator();
int index = 1;
while (it.hasNext()) {
Register temp = (Register)it.next();
在这里,我只用了一次查询:
[java]
getRegistersByConferenceId就取出来了所有的注册信息。这个函数是这样写的:
[java]
//根据会议Id获得参加会议的报名情况
public Collection getRegistersByConferenceId(int conferenceId) throws Exception
{
Statement stmt=con.createStatement();
ResultSet rst=stmt.executeQuery("SELECT dtsc_register.id, dtsc_register.name, dtsc_register.sex, dtsc_register.age, dtsc_register.race,"+
"dtsc_register.identificationId, dtsc_register.department, dtsc_register.positionOrIdentity, dtsc_register.mobilephone,"+
"dtsc_register.departure, dtsc_register.arrivingTime, dtsc_register.ip, dtsc_register.registerTime, dtsc_register.education,"+
"dtsc_register.address, dtsc_register.zipcode, dtsc_register.suozaibumen, dtsc_register.telephone, dtsc_register.isFirst "+