sql语句拼接问题
我现在在做一个商品筛选属性功能,类似京东那样的效果,我想问一下,当我点击第一个条件品牌的时候(品牌是三星),下面用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;
}