'How can I handle a search by a dynamic set of variables in JDBC?
I'm making a dynamic query to pass to mysql based on which variables I'm passing are not null.
I can build the query without a problem, but I can't understand how to work on the right group of variables.
for example, in a situation where everything I pass is null I'll just have a "SELECT * FROM mytable
", but if I'm passing (null, int, null string, null)
or (float, int, null, null, null)
, with a query like "SELECT * FROM mytable WHERE x=int AND...
" I'm not sure how to work on the right combination.
I could open tons of if for every combination, but I feel the wouldn't be the right move.
Solution 1:[1]
If I undestood it correctly you need to build a query and apply only those values in the where conditions which are not null.
You use StringBuilder to build your query, like below.
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.
Solution 2:[2]
You can do it ways mentioned below:
- dynamically build the query string based on values of vars. Like if x is not null, add its query portion:
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 }
This way you can build your entire query. Be careful with the syntax,
spaces
2.
as @PM 77-1
suggested.
Suppose, let's say your variable x can be null or not null. For both cases, you can handle it this way:
select * from myTable where (x is null or x<10) AND (Y is null or y<=6); //just add your conditions after `or` operator
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Nikhil Pandit |
Solution 2 |