有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当您有多个查询组合时,java是搜索DB的更好方法?

我试着思考是否有更好的方法来做以下事情。。 我有一个包含3个输入的表单,在servlet中我读到了它们:

String input1= request.getParameter("input1");
String input2= request.getParameter("input2");
String input3= request.getParameter("input3");

我使用StringUtils.isBlank(input1)检查用户是否填写了输入

现在我想询问我的数据库(我使用preparedStatements来询问我的数据库(SQLITE),以获取表中是否有包含这些输入组合的记录

因此,如果用户只填写第一个输入,那么查询应该是

SELECT * FROM MyTable WHERE INPUT1='input1'

如果用户填写了2个输入,那么查询应该是

SELECT * FROM MyTable WHERE INPUT1='input1' AND INPUT2='input2'

和e.t.c

我所做的是

if(!StringUtils.isBlank(input1) && !StringUtils.isBlank(input2) &&  !StringUtils.isBlank(input3) ){  
    //search for input1+ input2+ input3
}else if(!StringUtils.isBlank(input1) && !StringUtils.isBlank(input2)){ 
    //search for input1 + input2
}//e.t.c

有没有更好的方法来实现这一点,而不是根据输入是否已填充来写下所有可能的查询组合?谢谢!


共 (2) 个答案

  1. # 1 楼答案

    “更简单”是什么意思一直是个问题,但我认为以下内容更具可读性:

    1. 只需确保字符串为空或包含有用的内容:
    String input1= StringUtils.stripToEmpty(request.getParameter("input1"));
    String input2= StringUtils.stripToEmpty(request.getParameter("input2"));
    String input3= StringUtils.stripToEmpty(request.getParameter("input3"));
    
    1. 在SQL中执行所有检查:
    SELECT * FROM MyTable WHERE (? = '' or INPUT1 = ?) AND (? = '' or INPUT2 = ?) AND (? = '' or INPUT3 = ?)
    
  2. # 2 楼答案

    如果您已经在使用StringUtils,那么您可以执行以下操作:

    private String extractWhereQueryPart(String input1, String input2, String input3) {
        List<String> sqlParts = new ArrayList<String>();
    
        if (StringUtils.isNotEmpty(input1)) {
            sqlParts.add(" INPUT1 = @input1 ");
        }
    
        if (StringUtils.isNotEmpty(input2)) {
            sqlParts.add(" INPUT2 = @input2 ");
        }
    
        // and so on
    
        if(sqlParts.isEmpty()) {
            return "";
        }
    
        return " WHERE " + StringUtils.join(sqlParts, " AND ");
    }
    

    这种逻辑最终会更简单,因为你不需要做if-else-if。只是简单的if,这种方法更受支持