自动生成的数据库请求

时间:2014-05-05 09:42:34

标签: java sql database

如何实现自动生成的数据库(让它成为SQL)请求?

让我们使用过滤器离线商店:

enter image description here

数据库是独立脱机的。

因此,如果我想按价格过滤商品,请求会是这样的:

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中实现,以便从所选过滤器的任意组合自动生成这些请求?

1 个答案:

答案 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会让你的代码变得非常混乱。难以阅读(也可以通过存储过程完成)

SQL- CASE Statement

我建议您使用混合了选项1和2的存储过程。Implementing Dynamic SQL Where Clause。保持简单,你就好了。