我在尝试动态生成从网页中的条目生成的SQL SELECT语句时遇到了一些小麻烦。 基本上我在网站上有一个小搜索引擎,它接受三个参数(价格,城市,品牌),所以我有一个同样的方式构建的JavaBean只有3个属性,相同的。 在数据库上执行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 当用户没有在网页的字段中插入参数时,我的问题出现了,因为显然他对限制不感兴趣。 我需要找到一种在运行时“剪切”条目的方法,例如:
city field =“”?然后从搜索条件中取出城市:
String sql=select * from product where price<=? and brand=?;
我能做到的一种方法是使用else-if填充servlet中的代码,但这不是我确定的唯一解决方案。 另一个可能的解决方案是使用SQL的IFNULL(expr1,expr2)函数但是如果是null,那么我应该从查询中删除空字段。
你有什么建议吗?
我希望它清楚地解释它的方式。
答案 0 :(得分:1)
您可以在OR
子句中使用WHERE
来执行以下操作:
WHERE (Price<=? OR ? IS NULL)
AND (City = ? OR ? IS NULL)
AND (Brand = ? OR ? IS NULL)
答案 1 :(得分:0)
尝试用Like'%[input_value]%'替换条件“=”。这样,如果uset留下空白字段,则没有任何限制。
答案 2 :(得分:-1)
您可以将like
用于字符串。
String sql = "SELECT * FROM product WHERE price <= ? AND city like '?' AND brand like '?'";
prep = conn.prepareStatement(sql);
prep.setDouble(1, price);
prep.setString(2, city);
prep.setString(3, brand);
请参阅Exact match with sql like and the bind
如果未选择城市/品牌,请将其设置为
prep.setString(2, "%");
prep.setString(3, "%");
如果未选择价格,则使用一些非常大的数字。