日期:2014-05-16  浏览次数:20804 次

sql语句拼接问题
我现在在做一个商品筛选属性功能,类似京东那样的效果,我想问一下,当我点击第一个条件品牌的时候(品牌是三星),下面用DataList绑定查询出数据,这个我能实现,问题是当我想要再点击其他属性时,比如说价格(4000-6000),那么怎么让它在当前已筛选完的品牌条件下,也就是说三星下再查找满足这个价格的数据给提出来。我在网上看,说是用sql拼接语句,但是我这个属性是在一个表中,那应该怎么用sql拼接?这个表的字段有id,shuxing_name(属性名称:如品牌,价格),shuxing(具体属性),pro_id(产品id)
------解决方案--------------------
引用:
我现在在做一个商品筛选属性功能,类似京东那样的效果,我想问一下,当我点击第一个条件品牌的时候(品牌是三星),下面用DataList绑定查询出数据,这个我能实现,问题是当我想要再点击其他属性时,比如说价格(4000-6000),那么怎么让它在当前已筛选完的品牌条件下,也就是说三星下再查找满足这个价格的数据给提出来。我在网上看,说是用sql拼接语句,但是我这个属性是在一个表中,那应该怎么用sql拼接?这个表的字段有id,shuxing_name(属性名称:如品牌,价格),shuxing(具体属性),pro_id(产品id)

对的,可以用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;
------解决方案--------------------
假如就两个条件(多个同理),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;
}