<%
    String idno=request.getParameter("searchidno");  //获取提交的身份证号
    String name=request.getParameter("searchname");   //获取提交的姓名
    String origin=request.getParameter("searchorigin"); //获取提交的籍贯
    if(idno==null){idno="";}
    byte b[]=idno.getBytes("ISO-8859-1");
    idno=new String(b);    
    if(name==null){name="";}
    byte c[]=name.getBytes("ISO-8859-1");
    name=new String(c);
    if(origin==null){origin="";}
    byte d[]=origin.getBytes("ISO-8859-1");
    origin=new String(d);
    
    
    
    String sql1="select * from basic where idno='"+idno+"'";
    String sql2="select * from basic where name='%"+name+"%'";
    String sql3="select * from basic where origin='"+origin+"'";
    String sql4="select * from basic where idno='"+idno+"' and name='%"+name+"%'";
    String sql5="select * from basic where idno='"+idno+"' and origin='"+origin+"'";
    String sql6="select * from basic where name='%"+name+"%' and origin='"+origin+"'";
    String sql7="select * from basic where idno='"+idno+"' and name='%"+name+"%' and origin='"+origin+"'";
   CONTROLDB con=new CONTROLDB();
   ResultSet rs;
   if(idno=="" & name=="" & origin==""){response.sendRedirect("basicsearcherror.jsp");}
   else if(idno=="" & name=="" & origin!=""){ResultSet rs=con.executeQuery(sql3);}
   else if(idno=="" & name!="" & origin==""){ResultSet rs=con.executeQuery(sql2);}
   else if(idno!="" & name=="" & origin==""){ResultSet rs=con.executeQuery(sql1);}
   else if(idno!="" & name!="" & origin==""){ResultSet rs=con.executeQuery(sql4);}
   else if(idno!="" & name=="" & origin!=""){ResultSet rs=con.executeQuery(sql5);}
   else if(idno=="" & name!="" & origin!=""){ResultSet rs=con.executeQuery(sql6);}
   else {
     rs=con.executeQuery(sql7);
   }
%><p align=right>AI's Studio</p>
<CENTER>
     <P>添加新记录后数据库:</P>
<TABLE border="" >
<TBODY>
<TR>
<TH width="50">身份证号</TH>
<TH width="100">姓名</TH>
<TH width="120">籍贯</TH>
                                <TH width="50">性别</TH>
                                <TH width="50">年龄</TH>
</TR>
<%      if(rs.next())response.sendRedirect("notfound.jsp");
        else {
                do{%>
<TR align="center">
<TD><%=rs.getString(1)%></TD>
<TD><%=rs.getString(2)%></TD>
<TD><%=rs.getString(3)%></TD>
                                <TD><%=rs.getString(4)%></TD>
                                <TD><%=rs.getString(5)%></TD>
</TR>
<%              }while(rs.next());
        }%>
</TBODY>
</TABLE>
</CENTER>
         <p align=center><a href="basicinfo.jsp">返回</a></p>
<%
     con.close();
 %>编译通不过,总说rs没有初始化,如果在if中初始化rs问题就变成rs变量未定义,不明白该怎么弄了,请大家帮帮忙拉!
btw,如果可以帮我改进一下if/else那些复杂的逻辑就更好啦

解决方案 »

  1.   

    ResultSet rs = null就编译通过了,不过要捕捉NullPointerException的异常
      

  2.   

    查询应该以主键为搜索目标,这里有身份证id就不必搜索其他的column了查询其它非主键的column,可以尝试PrepareStatement
      

  3.   

    变成ResultSet rs=null;之后确实编译通过了,不过有了[ODBC 驱动程序管理器] 无效的游标状态,这个是怎么回事啊,如果结果集搜索为空的话,不是有if(rs.next())response.sendRedirect("notfound.jsp");跳转嘛,为什么还会出问题呢?如果搜索条件均为空也有if(idno=="" & name=="" & origin==""){response.sendRedirect("basicsearcherror.jsp");}跳转啊~
    我是新手,看不太明白您说的,该怎样捕捉异常?为什么有异常呢?谢谢~~
      

  4.   

    ResultSet rs;
    //>>这里得初始化为null
       if(idno=="" & name=="" & origin==""){response.sendRedirect("basicsearcherror.jsp");}
       else if(idno=="" & name=="" & origin!="")
    {ResultSet rs=con.executeQuery(sql3);}
    //>>这里定义重复了,去掉类型声明ResultSet :{ rs=con.executeQuery(sql3);}
      

  5.   

    <%      if(rs.next())response.sendRedirect("notfound.jsp");
    //>>是if(!rs.next())吧?
            else {
                    do{%>
    <TR align="center">
      

  6.   

    阿 确实是问题,我已经将查询分成3个分别提交了,刚刚接触这个东西感觉很不舒服,现在稍微习惯一点了。谢谢大家的帮忙~it really helps