如何通过 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.
您可以通过以下方式进行:
- 根据变量的值动态构建查询字符串。如果 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
我正在根据我传递的变量不为空进行动态查询以传递给 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.
您可以通过以下方式进行:
- 根据变量的值动态构建查询字符串。如果 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