gpt4 book ai didi

java - 使用具有多个可能的 "where"语句的 java 查询 mysql

转载 作者:行者123 更新时间:2023-11-30 21:38:29 25 4
gpt4 key购买 nike

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

问题是其中一些字段可以(并且可能)留空。例如,用户可能只想根据特定类型、导演和长度过滤数据。或者他们可能只想根据制作工作室过滤它,而不关心其他过滤器选项。

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

假设我只想过滤一个字段。然后我知道我可以写

String field = //user input (for example: actor)
String filter = //user input (for example: 'tom cruise')
String SQL_String = "SELECT * FROM Movies WHERE "+field + "=" +filter

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

一些示例查询可能是:

"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 代码来考虑这些并构造一个查询字符串。

最佳答案

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

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

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

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);

}
}

关于java - 使用具有多个可能的 "where"语句的 java 查询 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52826288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com