我在尝试动态生成从网页条目生成的SQL SELECT语句时遇到了一些小麻烦。
基本上,我在网站上有一个小型搜索引擎,它接受三个参数(价格,城市,品牌),所以我有一个以相同方式构建的JavaBean,仅具有三个属性,即相同的属性。
在数据库上执行SELECT时,我可以使用PreparedStatement以这种方式进行
String sql=select * from product where price<=? and city=? and brand=?;
prep=conn.prepareStatement(sql);
prep.setDouble(1,price);
prep.setString(2,city);
prep.setString(3,brand);
当然,prep是PreparedStatement obj
当用户没有在网页的字段中插入参数时,就会出现我的问题,因为显然他对限制不感兴趣。
我需要找到一种在运行时“剪切”条目的方法,例如:
城市field =“”?然后从搜索条件中取出城市:
String sql=select * from product where price<=? and brand=?;
我可以做到的一种方法是用else-if填充servlet中的代码,但这不是我确定的唯一解决方案。
另一个可能的解决方案是使用SQL的IFNULL(expr1,expr2)函数,但是如果为null,那么我应该从查询中删除null字段。
您有什么建议吗?
我希望它的解释方式足够清楚。
最佳答案
您可以在OR
子句中使用WHERE
来执行以下操作:
WHERE (Price<=? OR ? IS NULL)
AND (City = ? OR ? IS NULL)
AND (Brand = ? OR ? IS NULL)