对的,可以用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;
比如当你没选择品牌时:
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;
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;
}