功能:
实现多条查询,条件有开始时间、结束时间、作者、类型等多个
不知道大家是怎么写的,我都是if else 判断然后写SQL语句
if(!type.equals(""))
     { sql=sql+" and type ='"+type+"'";
              }
       
  if(!name.equals(""))
   { sql=sql+" and name ='"+name+"'";
    
   }在加上开始时间和结束时间就会有更多的if  else 了我想使用PreparedStatement进行预编译的,如果使用上面的方法就很困难,有没有更优化的语句?

解决方案 »

  1.   

    只能这么做啊  还有别的方法么??
    你可以吧SQL 语句用  STRINGBUFFER 来写 能比这个简单点??
      

  2.   

    推荐用stringbuffer来写,会比你这样子写简单许多。
    具体的就是利用append方法往后面贴sql语句。楼主可以试试
      

  3.   

    String rtype = request.getParameter("rtype"); 
    //这里的rtype可以是 作者,类型,但你的url中,如果是点击的 "类型" 查询,URL后就要加 "rtype=类型",
     如果是点击的 "作者" 查询,URL后就要加 "rtype=作者",以此类推sql = sql+"and "+rtype+"and"+rtype;
      

  4.   

    ... 最好还是用 StringBuffer另外,
    if(!type.equals("")) 
        { sql=sql+" and type ='"+type+"'"; 
                  } 
          
      if(!name.equals("")) 
      { sql=sql+" and name ='"+name+"'"; 
        
      } 如果你的判断条件一样的话,就把这些放到一个函数中appendCondtion(StringBuffer sbSql, String name, String colName){
       if(!name.equals("")) 
      { sbSql.append(" and ").append(colName).append(" ='").append(name).append("'");   } }具体的你要测试
      

  5.   

    关键是条件有时是空的,而且我想使用PreparedStatement进行预编译的
      

  6.   

    那么你就用if else 判断咯。。要么多写几个方法吧!!
      

  7.   

    我想使用PreparedStatement进行预编译   
      

  8.   

    为了防止sql注入 我要进行预编译, 查询条件越多,判断就越多 ,情况就越多  麻烦呀
      

  9.   

    用map存你的条件key是字段名value是查询的值  可以通过循环进行组合SQL语句
      

  10.   


    // 基本sql语句
    StringBuffer sql = new StringBuffer("select * from table where 1=1 ");// 传过来的值是哪一个字段上的你应该知道
    String param1 = "字段一的值";
    String param2 = "字段二的值";
    ......// 存放字段的值
    List params = new ArrayList();if(字段一的值!=null){
        sql.append("and 字段一 = ? ");
        params.add(字段一的值);
    }
    if(字段二的值!=null){
        sql.append("and 字段二 like ? ");
        params.add(字段二的值);
    }// 查询的时候做个循环赋值
    for(params){
        preparedstatement.setObject(i+1,params.get(i));
    }
      

  11.   

    开始时间(begintime)、结束时间(endtime)、作者(author)、类型(type)String sql="select * from 表 where (author like ?) and (type like ?) and (begintime>? and endtime<?)";如果为空的话,就设置为"",就可以查询出全部的了。。其他的代码略。。
      

  12.   

    你可以吧SQL 语句用  STRINGBUFFER 来写 能比这个简单点??