StringBuilder e List para montar clausula where do SQL
8 respostas
M
Marcos_rhs
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=newArrayList<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+"'");StringBuildersb=newStringBuilder();for(Strings:lista){sb.append(" and ").append(s);}Stringretorno=sb.toString().replaceFirst("and","");ResultSetrs_c=Conexao.stm.executeQuery("SELECT COUNT(*) AS c FROM cqa where"+retorno+"order by id_cqa");
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
Marcos_rhs
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
ozix
Só um detalhe, não precisa usar o StringBuffer, pode usar o StringBuilder mesmo.