有三个复选框,如何写那条select语句,对MySQL数据库里的内容进行查询,后返回查询的结果.
  
                 参赛组别:<input type="checkbox" name="csdx" value ="1">教师<input type="checkbox" name="csdx" value ="2">学生<br>
                    作品类型:<input type="checkbox" name="zplx" value ="1">教学类<input type="checkbox" name="zplx" value ="2">活动类<input type="checkbox" name="zplx" value ="3">会议类<br>
                    作品风格:<input type="checkbox" name="zpfg" value ="1">高贵典雅<input type="checkbox" name="zpfg" value ="2">现代时尚<input type="checkbox" name="zpfg" value ="3">清爽健康<input type="checkbox" name="zpfg" value ="4">简洁个性<input type="checkbox" name="zpfg" value ="5">其他<br>
--------------------------------------------------------------------------------------------------
        String csdx[] = request.getParameterValues("csdx");
        String zplx[] = request.getParameterValues("zplx");
        String zpfg[] = request.getParameterValues("zpfg");
        String sql = "SELECT * FROM ppt WHERE";
        String Scsdx ="";String Szplx = "";String Szpfg = "";
if(csdx.length>0)
  {
     for(int i=0;i<csdx.length;i++){
  Scsdx=Scsdx+csdx[i]+",";
 }
     Scsdx=Scsdx.substring(0,Scsdx.length()-1);
     sql=sql+ " csdx in("+Scsdx+")";}else{       
        if(zplx.length>0)
  {
     for(int i=0;i<zplx.length;i++){
  Szplx=Szplx+zplx[i]+",";
 }
     Szplx=Szplx.substring(0,Szplx.length()-1);
     sql=sql+ " AND zplx in("+Szplx+")";}else{       
        if(zpfg.length>0)
  {
     for(int i=0;i<zpfg.length;i++){
  Szpfg=Szpfg+zpfg[i]+",";
 }
     Szpfg=Szpfg.substring(0,Szpfg.length()-1);
     sql=sql+ " AND zpfg in("+Szpfg+")";}else{sql = "SELECT * FROM ppt";}}}
------------------------------------------------------------------------------------------------------
我写的语句出现问题,只能以第一个复选框的值来搜索,如果第一个复选框不选的话就会出错..

解决方案 »

  1.   

    你是通过什么来判断你前台选中的是哪个呢?你的value貌似很多重复的。。
      

  2.   

    request.getParameterValues 的返回值是数组 ,如果第一个不选择csdx.length 就会报错,加上是否为null判断。
      

  3.   

    是不是要这样判断是否为空?
    if(!csdx.equals("")) ?每个复选框的value值在数据库里都是不同的字段的.应该没问题吧?
      

  4.   

    TO sunhaochengood
     给点建议..我刚开始学...
      

  5.   

    如果第一个复选框未选,则执行 if(zplx.length>0),在where 后面直接加' and ',拼接的sql语句
    SELECT * FROM ppt WHERE AND zplx in("+Szplx+") ,所以会提示错误
    以本人两年的开发经验告诉你 ,定义sql语句时
     String sql = "SELECT * FROM ppt WHERE 1 = 1";
    这样不管第一个循环还是第二个循环,都直接累加' and' ,这样就不会报错
      

  6.   

    最好不要用Select * 写全为好。。
      

  7.   

    TO adore_art
    太感谢你了..我试试
      

  8.   

    唉,给你写了简单的方法,一个jsp页面,可以直接运行的,输出的是sql语句,你去看看<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head> <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page"> </head>
    <body>
    <form action="${pageContext.request.contextPath }/index.jsp">
    参赛组别:
    <input type="checkbox" name="csdx" value="1">
    教师
    <input type="checkbox" name="csdx" value="2">
    学生
    <br>
    <hr /> 作品类型:
    <input type="checkbox" name="zplx" value="1">
    教学类
    <input type="checkbox" name="zplx" value="2">
    活动类
    <input type="checkbox" name="zplx" value="3">
    会议类
    <br>
    <hr /> 作品风格:
    <input type="checkbox" name="zpfg" value="1">
    高贵典雅
    <input type="checkbox" name="zpfg" value="2">
    现代时尚
    <input type="checkbox" name="zpfg" value="3">
    清爽健康
    <input type="checkbox" name="zpfg" value="4">
    简洁个性
    <input type="checkbox" name="zpfg" value="5">
    其他
    <br>
    <hr />
    <input type="submit" value="提交" />
    </form>
    </body>
    <%
    String[] csdx = request.getParameterValues("csdx");
    String[] zplx = request.getParameterValues("zplx");
    String[] zpfg = request.getParameterValues("zpfg");
    String sql = "SELECT * FROM ppt WHERE 1=1 ";
    String Scsdx = "";
    String Szplx = "";
    String Szpfg = "";
    //判断参赛组别:
    if(null != csdx && csdx.length > 0){
    Scsdx = Arrays.asList(csdx).toString();
    sql += " and csdx in "+(Scsdx.replace("[","(")).replace("]",")");
    }
    //作品类型:
    if(null != zplx && zplx.length > 0){
    Szplx = Arrays.asList(zplx).toString();
    sql += " and zplx in "+(Szplx.replace("[","(")).replace("]",")");
    }
    //作品风格:
    if(null != zpfg && zpfg.length > 0){
    Szpfg = Arrays.asList(zpfg).toString();
    sql += " and zpfg in "+(Szpfg.replace("[","(")).replace("]",")");
    }

    out.println(sql);

    %>
    </html>
      

  9.   

    to yanweijie0317:
    我改了 String sql = "SELECT * FROM ppt WHERE 1 = 1";和判断选中的复选框的值if(!csdx.equals("")&&csdx.length > 0)to tengai_ygj:
    太好了..谢谢指导..你的代码我可以成功运行..,知道我的代码关键是错再哪里?..可以给点建议吗?
      

  10.   


    代码跟你改了一下,你那样判断是有问题的,比如说:if(csdx.length>0)这样判断是不对的,如果你一个都不选的话,通过 request.getParameterValues()获取的是为空值,所有要加上"null != csdx"这样才对吗。还有的是你的if else用的不到位。逻辑有问题,干么写的那么复杂呢,想简单点既可以了。下面是我修改你的代码,然后住的的是在发帖的时候,主要把格式搞好,这样,被人很难看懂问题。代码可以直接运行:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head> <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page"> </head>
    <body>
    <form action="${pageContext.request.contextPath }/Test.jsp">
    参赛组别:
    <input type="checkbox" name="csdx" value="1">
    教师
    <input type="checkbox" name="csdx" value="2">
    学生
    <br>
    <hr /> 作品类型:
    <input type="checkbox" name="zplx" value="1">
    教学类
    <input type="checkbox" name="zplx" value="2">
    活动类
    <input type="checkbox" name="zplx" value="3">
    会议类
    <br>
    <hr /> 作品风格:
    <input type="checkbox" name="zpfg" value="1">
    高贵典雅
    <input type="checkbox" name="zpfg" value="2">
    现代时尚
    <input type="checkbox" name="zpfg" value="3">
    清爽健康
    <input type="checkbox" name="zpfg" value="4">
    简洁个性
    <input type="checkbox" name="zpfg" value="5">
    其他
    <br>
    <hr />
    <input type="submit" value="提交" />
    </form>
    </body>
    <%
    String[] csdx = request.getParameterValues("csdx");
    String[] zplx = request.getParameterValues("zplx");
    String[] zpfg = request.getParameterValues("zpfg");
    String sql = "SELECT * FROM ppt WHERE 1=1 ";
    String Scsdx = "";
    String Szplx = "";
    String Szpfg = "";
    if (null != csdx && csdx.length > 0) {
    for (int i = 0; i < csdx.length; i++) {
    Scsdx = Scsdx + csdx[i] + ",";
    }
    Scsdx = Scsdx.substring(0, Scsdx.length() - 1);
    sql = sql + " csdx in(" + Scsdx + ")";
    }
    if (null != zplx && zplx.length > 0) {
    for (int i = 0; i < zplx.length; i++) {
    Szplx = Szplx + zplx[i] + ",";
    }
    Szplx = Szplx.substring(0, Szplx.length() - 1);
    sql = sql + " AND zplx in(" + Szplx + ")";
    } if (null != zpfg && zpfg.length > 0) {
    for (int i = 0; i < zpfg.length; i++) {
    Szpfg = Szpfg + zpfg[i] + ",";
    }
    Szpfg = Szpfg.substring(0, Szpfg.length() - 1);
    sql = sql + " AND zpfg in(" + Szpfg + ")";
    } out.println(sql);
    %>
    </html>
      

  11.   

    其实这种用hibernate的criteria查询比较方便,直接传条件的实体类
      

  12.   

    TO tengai_ygj
     非常感谢你的指导!!