2013-05-28 40 views
0

我正在实施搜索,用户需要填写不同的字段以进行搜索,但我不确定如果用户不填写某些内容田野。如何根据已填写的字段数进行搜索

比方说,我要求他们填写姓名,家庭,年龄,

用户可以将任何这些空白的,所以我应该根据填充一个搜索城市和国家。

例如,如果姓名和家庭填写名称和家庭搜索,并且如果名称,家庭和国家填写,搜索包含所有这三个的记录。

我正在使用准备好的语句,如果我使用Persitance API呢?

  ps.setString(1, "Name"); 
     ps.setString(2, "Family"); 
     ps.setint(3, "age"); 
     ps.setString(4, "city"); 
     ps.setString(5,"country"); 

查询

SELECT * FROM Customer WHERE name = ? AND family = ? AND age = ? AND city = ? AND country = ? 
+1

这可能有所帮助:http://stackoverflow.com/questions/4215135/how-to-deal-with-maybe-null-values-in-a-preparedstatement – sgeddes

回答

1

你要删除引用未指定的字段中的表达式。

您可以有一个SortedMap<String, Object>其中只包含请求的字段。迭代完成并使用StringBuilder构建SQL where子句并设置参数值。

有些ORM会为你做这个。

+0

你会给我一个例子吗?我无法找到一个,如果我使用字符串生成器,那么如何使用准备好的语句来做到这一点? – J888

+0

在语句构建完成后绑定值。这些值是在遍历字段时被追加到的列表。 (还有[squiggle](https://code.google.com/p/squiggle-sql/)用于生成SQL。) – jspcal

相关问题