对的,可以用sql拼接的方式来实现:
比如当你没选择品牌时:
l_sql_str:='select * from t_product';
当你选择三星时:
l_sql_str:=l_sql_str||' where shuxing_name=''三星''';
当你再选择价格时:
l_sql_str:=l_sql_str||' and price>=4000 and price<=6000';
然后动态执行:
execute l_sql_str;

解决方案 »

  1.   

    假如就两个条件(多个同理),sql拼接的核心代码如下:
        public List<Product> findByCondition(String pro_name,int price){
        List<Object> params = new ArrayList<Object>();
      //拼接sql 
      StringBuffer sb = new StringBuffer();
        //每拼接一条sql语句,在末尾一定要留个空格
       sb.append("select * from product p where 1=1 ");
        if(pro_name!=null && pro_name.length()>0)
    {
       sb.append("and pro_name=? ");
       params.add(pro_name);
    }
       if(price>4000 && price<6000)
     {
       sb.append("and price = ?");
       params.add(price);
    }
      //查询
     List<Product> list = new ArrayList<Product>();
     Connection con = DBUtil.getConnection();
      PreparedStatement ps = con.preparedStatement(sb.toString());
       for(int i=0;i<params.size();i++)
    {
    /*
     * 设置参数的下标从1开始,而i是从0开始循环,
     * 因此这里传入i+1
     * */
       ps.setOject(i+1,params.get(i));}
       ResultSet rs = ps.executeQuery();
       while(rs.next())
    {
       Product p = createAccount(rs);
     list.add(p);
    }
      return list;
    }
      

  2.   

    现在网站上的条件查询都是这么干的,这种做法很灵活,不管有多少个属性,都可以用if语句进行判断,然后再进行sql拼接。