StringBuilder e List para montar clausula where do SQL

Pessoal, usei o StringBuilder para montar as clausulas do meu sql. Posso utilizar o StringBuilder para fazer as combinações?

Ou seja existe algum risco de usar StringBuilder?

List<String> lista = new ArrayList<String>();   
    
    if(dataFormPesq!=null)
 	   lista.add("data_criacao>='"+dataFormPesq+"'");
    if(dataFormPesq1!=null)
 	   lista.add("data_criacao<='"+dataFormPesq1+"'");
    if(!nbrCqa.equals(""))
 	   lista.add("id_cqa = '"+nbrCqa+"'");
    if(!emissor.equals(""))
 	   lista.add("aprovador='"+emissor+"'");
    if(!status.equals(""))
  	   lista.add("status='"+status+"'");
  
    StringBuilder sb = new StringBuilder();     
    for(String s : lista){     
       sb.append(" and ").append(s);     
    }   
    String retorno = sb.toString().replaceFirst("and", "");  
	
    ResultSet rs_c = Conexao.stm.executeQuery("SELECT COUNT(*) AS c FROM cqa where" +retorno+ "order by id_cqa");

Marcos

StringBuffer

[...]

StringBuffer sql = new StringBuffer();
    	sql.append("select * from table where 1 = 1");
    	if(condicao1 == true){
    		sql.append("and campoX = condicao");
    	}
        if(condicao2 == true){
    		sql.append("and campoX = condicao");
    	}
    	sql.toString();

[...]

Legal Rubens,

Vc pode exemplicar utilizando as minhas condições?

[quote] StringBuffer sql = new StringBuffer();
sql.append(“select * from table where 1 = 1”);
if(dataFormPesq!=null){
sql.append(“and data_criacao >= param”);
}
if(!status.equals("")){
sql.append(“and status = param2”);
}
sql.toString();
}[/quote]

Onde tem param e param 2, você substituir pelo parâmetro que for necessário. Não é a melhor maneira, deixar os parâmetros “fixos” ali, mas eu acho mais simples assim do que no seu exemplo.

t+

[code] StringBuffer sql = new StringBuffer();

         sql.append("select * from table where 1 = 1");

         if(dataFormPesq!=null){
             sql.append("and data_criacao >= param");
         }

         if(!status.equals("")){
             sql.append("and status = param2");
         }

         sql.toString();

}[/code]

Onde tem param e param 2, você substituir pelo parâmetro que for necessário. Não é a melhor maneira, deixar os parâmetros “fixos” ali, mas eu acho mais simples assim do que no seu exemplo.

t+

Ok Rubens, o que eu não entendi foi esta linha

sql.append("select * from table where 1 = 1");   

Porque vc usa where 1 = 1? Existe algum motivo?

Post 14/08/2009 11:14:11 Assunto: Re:StringBuilder e List para montar clausula where do SQL
Ok Rubens, o que eu não entendi foi esta linha

view plaincopy to clipboardprint?

   1. sql.append("select * from table where 1 = 1");     

sql.append("select * from table where 1 = 1");

usa-se “where 1 = 1” para garantir que a query executará mesmo que os parâmetros não sejam setados.
para o caso de tentar setar um parâmetro e a condição de esse parâmetro estar nulo ou a asua condiçção não seja atendida… usando assim ele sempre executará…

Só um detalhe, não precisa usar o StringBuffer, pode usar o StringBuilder mesmo.

Exatamente, me confundi.

É StringBuilder