StringBuilder e List para montar clausula where do SQL

8 respostas
M

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

8 Respostas

rubensdemelo

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();

[...]
M

Legal Rubens,

Vc pode exemplicar utilizando as minhas condições?

rubensdemelo
<blockquote>	 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();

}</blockquote>

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+

rubensdemelo
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();

	}

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+

M

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?

Bukira_Boy

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á…

O

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

rubensdemelo

Exatamente, me confundi.

É StringBuilder

Criado 13 de agosto de 2009
Ultima resposta 14 de ago. de 2009
Respostas 8
Participantes 4