java - 如何根据已填写的字段数进行搜索

标签 java mysql jakarta-ee

我正在实现一个搜索,用户需要填写不同的字段才能进行搜索,但我不确定如果用户没有填写某些字段,我将如何进行搜索。

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

用户可能会将这些中的任何一个留空,因此我应该根据已填写的进行搜索。

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

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

最佳答案

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

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

一些 ORM 会为您做这件事。

关于java - 如何根据已填写的字段数进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16782406/

相关文章:

java - 带有安全 header 的 SOAP Web 服务

java - 在jsp中处理文本框中的空值

java - 覆盖 android 硬件后退按钮功能

java - 使用 servlet 从 mysql 检索数据的空指针异常

java - weblogic 10.3 上的 ClassCastException jboss-seam

java - 何时需要在 web.xml 中包含 Jersey ServletContainer 以启用 JAX-RS?

java - 关于Android上JNI的问题

java - 为什么在 StringBuilder 构造函数中使用连接比调用 append() 快 100 倍?

mysql - 如何执行 SELECT SUM(a) FROM b WHERE c=(具有多个结果的查询)

mySQL海量查询优化