如何通过 JDBC 中的一组动态变量处理搜索?

How can I handle a search by a dynamic set of variables in JDBC?

我正在根据我传递的变量不为空进行动态查询以传递给 mysql。

我可以毫无问题地构建查询,但我不明白如何处理正确的变量组。

例如,在我传递的所有内容都为空的情况下,我将只有一个“SELECT * FROM mytable”,但如果我传递 (null, int, null string, null)(float, int, null, null, null),则像“SELECT * FROM mytable WHERE x=int AND...”这样的查询我不确定如何处理正确的组合。

我可以为每个组合打开大量的 if,但我觉得这不是正确的举动。

如果我理解正确,您需要构建一个查询并仅应用 where 条件中不为 null 的那些值。

您使用 StringBuilder 构建查询,如下所示。

StringBuilder fixedQuery = new StringBuilder("SELECT * FROM mytable");

StringBuilder conditions = new StringBuilder();
if(myIntMember != null)
  conditions.append("x=:myIntPlaceHolder")
if(myStringMember != null)
  conditions.append(" AND y=:myStringPlaceHolder")

 ....so on 

 if(conditions.length()>0)
   fixedQuery.append(" WHERE ").append(conditions);
 //Later on just palce the named parameter value accordingly using the similar if conditions.
 //You dont have to check all permutation combinations.

您可以通过以下方式进行:

  1. 根据变量的值动态构建查询字符串。如果 x 不为空,则添加其查询部分:
 String query= "select * from myTable where 1=1 ";
    if(!Strings.isNullOrEmpty(x)) //string type
      {
         query+=" and columnName="+x; //or add your condition
       }
    if(y>0) //for integer type
       {
          query+=" and columnName="+y;// or add your condition you need
       }


这样您就可以构建整个查询。 注意语法, 空格

2.

@PM 77-1 所建议。 假设,假设您的变量 x 可以为空或不为空。对于这两种情况,您都可以这样处理:

select * from myTable where (x is null or x<10) AND (Y is null or y<=6); //just add your conditions after `or` operator