terça-feira, 21 de maio de 2013

Método para query dinâmica

A construção de métodos que montam queries dinâmicas requerem certos artifícios para conseguir construir um bom resultado. Um desses artifícios é o método abaixo que construí uma vez, ele recebe a query como parâmetro e avalia se nela já consta a palavra "WHERE". Se não constar, o método retorna a palavra "WHERE" mas, se constar, significa que a query já possui a cláusula WHERE, logo ele retorna "AND" visando complementar a instrução SQL.

Abaixo, descrevo o método e um exemplo de uso.

Método

public String addConditionalConnector(String query){
        if(query.indexOf("WHERE") == -1){
            return " WHERE ";
        } else {
            return " AND ";
        }
    }

Exemplo de uso:

public List listar(Objeto objeto){
StringBuilder query = new StringBuilder();
query.append("SELECT * FROM TABELA");
/*faço mais coisas*/
query.append(addConditionalConnector(query.toString()));
/*faço mais coisas*/
query.append(addConditionalConnector(query.toString()));
/*faço mais coisas e executo a query*/
}

Com esse método auxiliar, eu não preciso mais me preocupar com a sintaxe da query em relação a minha cláusula WHERE com AND, porque o método já avalia o que é necessário.

Para quem não entende SQL, seguem links:

http://www.w3schools.com/sql/default.asp
http://www.w3schools.com/sql/sql_select.asp
http://www.w3schools.com/sql/sql_where.asp
http://www.w3schools.com/sql/sql_and_or.asp

Nenhum comentário: