java - 当您有多种查询组合时,是否有更好的搜索数据库的方法?

标签 java jdbc prepared-statement

我尝试思考是否有更好的方法来执行以下操作.. 我有一个包含 3 个输入的表单,回到 servlet 中我读取了它们:

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

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

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

因此,如果用户仅填写第一个输入,则查询应该是

SELECT * FROM MyTable WHERE INPUT1='input1'

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

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

等等

我所做的是

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

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

最佳答案

如果您已经在使用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。而且这种方法更受支持。

关于java - 当您有多种查询组合时,是否有更好的搜索数据库的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37565656/

相关文章:

java - 如何在不破坏 CoordinatorLayout.LayoutParams 的情况下重写 CoordinatorLayout.Behavior

java - spring-Unnamed bean 定义既不指定 'class' 也不指定 'parent' 也不指定 'factory-bean' - 无法生成 bean 名称

java - SWT,添加 Key Listner 时保持默认选项卡顺序

java - 使用 JDBC 初始化类 JPA 实体

PHP - 准备好的语句和 json_encode

Java 运行 .bat 文件时出现问题

hibernate 和批量更新

java - 使用Java在MySql数据库中插入汉字

PHP 绑定(bind)通配符

php - 无法从数据库中获取与 PDO 中的条件匹配的特定行