首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用多个可能的"where“语句用java查询mysql

使用多个可能的"where“语句用java查询mysql
EN

Stack Overflow用户
提问于 2018-10-16 08:10:56
回答 1查看 75关注 0票数 1

我正在努力寻找一个很好的解决方案,一个电影过滤系统建立在java和mysql数据库。用户应该能够根据许多属性过滤他们希望看的电影,例如:导演、演员、长度、流派、年份……。总共有11个字段可用于过滤查询。

问题是这些字段中的一些可以(并且很可能会)留空。例如,也许用户只想根据某个流派、导演和长度来过滤数据。或者他们只想根据prodution studio进行过滤,而不关心其他过滤选项。

我已经建立了到服务器的连接,问题出在创建我将在statement.executeQuery(SQL_String)中使用的"SQL_String“。

假设我只想筛选一个字段。然后我就知道我可以写

代码语言:javascript
复制
String field = //user input (for example: actor)
String filter = //user input (for example: 'tom cruise')
String SQL_String = "SELECT * FROM Movies WHERE "+field + "=" +filter

但是,如果我想让用户根据几个(或零个)字段进行过滤,那么我不知道如何编写代码。

一些示例查询可能是:

代码语言:javascript
复制
"SELECT * FROM Movies WHERE (director = 'steven spielberg' AND genre = 'action' AND length >100)"

"SELECT * FROM Movies WHERE (type = 'tv-series' AND actor = 'bob odenkirk')"

因此,用户可以指定要过滤的字段(如果有),我需要想出一个java代码来考虑这些字段并构造一个查询字符串。

EN

回答 1

Stack Overflow用户

发布于 2018-10-16 09:05:27

因为您不知道用户将过滤多少字段,但是您知道您正在处理的数据有两个部分(字段和过滤器),所以我首先想到的两件事是映射和元组。由于与Python不同,Java语言没有内置的元组数据类型(据我所知),下面是我为您的问题想出的一个小示例解决方案,它使用Java语言的HashMap和Map类来解决。

在本例中,我创建了一个HashMap,键是“字段”的字符串,值是“过滤器”的字符串。您可以根据用户输入在代码中设置这些值(在本例中,只是在main方法中硬编码)。然后,您可以遍历HashMap (see this helpful post)中的键值对,追加键和值以及查询所需的其他字符。这是一个简单的示例,但显示了一种可能的解决方案。

如果您希望确保此解决方案适用于筛选值为整数的情况,则只需在循环中添加另一个If语句,以尝试解析整数,如果存在,则不添加额外的\‘转义字符。

代码语言:javascript
复制
import java.util.HashMap;
import java.util.Map;

public class MovieQueryTest {
  public static void main(String[] args) {

    String SQL_Query = "SELECT * FROM Movies WHERE ";

    HashMap<String, String> queryFilters = new HashMap<>();

    queryFilters.put("director", "Steven Spielberg");
    queryFilters.put("type", "tv-series");
    queryFilters.put("actor", "Bob Odenkirk");

    boolean firstQueryFilter = true;

    for (Map.Entry<String, String> entry : queryFilters.entrySet()) {
      if (firstQueryFilter) {
        SQL_Query += entry.getKey() + "=\'" + entry.getValue() + "\'";
        firstQueryFilter = false;
      } else {
        SQL_Query += " AND " + entry.getKey() + "=\'" + entry.getValue() + "\'";
      }

    }

    System.out.println(SQL_Query);

  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52826288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档