0

我正在实现一个搜索,其中用户需要填写不同的字段来进行搜索,但是如果用户不填写某些字段,我不确定如何进行搜索。

假设我要求他们填写姓名、家庭、年龄、城市和国家

用户可以将其中任何一个留空,所以我应该根据填写的内容进行搜索。

例如,如果填写姓名和家庭,只需搜索姓名和家庭,如果填写姓名、家庭和国家/地区,则搜索包含所有这三项的记录。

我正在使用准备好的语句,如果我使用 Persistance 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 = ?
4

3 回答 3

1

您需要删除引用未指定字段的表达式。

你可以有一个SortedMap<String, Object>只包含请求的字段。对其进行迭代并使用 a以及设置参数值来构建 SQLwhere子句。StringBuilder

一些 ORM 会为您执行此操作。

于 2013-05-28T01:06:59.373 回答
1

如果非常复杂,这种情况似乎需要像Hibernate Criteria Query API这样的东西。

于 2013-05-28T01:17:00.470 回答
1

对于更简单的情况, Squiggle SQL Builder可能很适合您。

于 2013-05-28T01:23:55.963 回答