如何实现自动生成的数据库(让它成为SQL)请求?
让我们使用过滤器离线商店:
数据库是独立脱机的。
因此,如果我想按价格过滤商品,请求会是这样的:
select Snowboard.Name
from Snowboard
where Snowboard.Price between 400 and 600;
如果我按两个特征过滤,例如价格来自 Camber 。会有:
select s.Name, s.Camber
from Snowboard s
where s.Price between 400 and 600
and s.Camber in ('Rocker', 'Hybrid');
问题是如何在Java中实现,以便从所选过滤器的任意组合自动生成这些请求?
答案 0 :(得分:1)
快速而肮脏的解决方案#1
在运行时生成查询&巧妙地使用WHERE 1=1
条件作为where子句的数量是未知的。 (此示例在C#中,但与JAVA的工作方式大致相同)
string sql= @"select Snowboard.Name
from Snowboard
where 1=1";
现在,您可以根据UI元素选择(如
)构建查询string whereClause="";
if(yourCheckBoxPrice.Checked)
{
whereClause+= " AND Price BETWEEN "+ txtPriceFrom.Text + " AND "+ txtPriceTo.Text;
}
if(yourCheckBoxCamber.Checked)
{
whereClause+= " AND Camber IN ("+ /* your list of values go here */ +")";
}
sql += whereClause;
第二个解决方案(使用SQL CASE)
您可以在查询中为每个where子句使用SQL CASE来检查空值或特定值。但要注意,动态SQL会让你的代码变得非常混乱。难以阅读(也可以通过存储过程完成)
我建议您使用混合了选项1和2的存储过程。Implementing Dynamic SQL Where Clause。保持简单,你就好了。