Queria saber quais são as opções que tenho para criar querys SQL no Java.
Tenho a seguinte situação
Stringquery="select * from produto where ativo = 1";if(nomeP!=null){query+=" and nome like '%"+nomeP+"%'";}if(fabricante!=null){query+=" and fabricante like '%"+fabricante+"%'";}
Mas com isso teria SQLInjection. quais são as melhores praticas para isso.
Eu cheguei a dar uma olhada no PreparedStatement, mas não consigo uma solução para quando tenho parametros variados na query.
A unica solução que imaginei para isso seria
intintNome=0;intintFabricante=0;Stringfabricante="";Stringquery="select * from produto where ativo = 1";if(nomeP!=null){query+=" and nome like '%?%'";intNome=++intParams;}if(fabricante!=null){query+=" and fabricante like '%?%'";intFabricante=++intParams;}PreparedStatementps=conn.prepareStatement(query);if(nomeP!=null){ps.setString(intNome,nomeP);}if(fabricante!=null){ps.setString(intFabricante,fabricante);}
Rodrigo_Sasaki
É, montar uma query assim é sempre um trabalho sujo. uns ifs que você não queria ter que colocar na sua query.
A vantagem no final ao usar o PreparedStatement é que você não tem que se preocupar com SQL Injection
F
fernandoat
Obrigado, melhor colocar ifs no codigo do que no sql…
obrigado.
Rodrigo_Sasaki
Concordo com você
gomesrod
Como o Rodrigo disse, fica sujão, mas usando JDBC não dá pra fugir de alguma coisa parecida com isso.
Só um pequeno erro: quando se usa PreparedStatement não se coloca as aspas:
As aspas são incluídas automaticamente ao redor do valor, assim como é feito o tratamento das aspas que por acaso estiverem dentro do parâmetro (evitando SQLInjection)
E aí os curingas do like acabam não funcionando também dessa forma… para fazer like seu código vai ter que ficar ainda mais feio