Boa tarde,
estou com o seguinte problema galera.
O usuário de uma aplicação a ser desenvolvida está precisando que o programa realize consultas, porém ele quer selecionar quais campos serão consultados. Por exemplo:
tabelacontames;ano;valor;
ele quer que a GUI permita montar a consulta por mes, ano, valor, todos, ou uma combinação dos dois. Porém a tabela é bem maior, e eu realizar uma consulta com cada combinação de campos, fica inviável.
Alguém conhece alguma ferramenta que permita passar parâmetros como o campo ou combinação de campos a ser pesquisado?
Tem algum livro bom a ser estudado?
Hybernate faz isso?
Desde já obrigado.
Crie uma tela com essas opções como checkbox, quando teu método receber esses parametros, verifique quais deles está “checkado” e então adicione na tua clausula where.
Entendeu mais ou menos?
Leonardo_Gloria
O Hibernate tem um negócio bacana chamado Example… dah uma pesquisada nisso acho q vai ter ajudar… Query By Example… QQ dúvida posta ae
[]s!
Leonardo Gloria
lordtiago
Boa tarde,
segui a dica de vocês, demorei um pouquinho mas consegui implementar. Fiz um esquema igual o blackout sugeriu e caiu muito bem:
publicclassQueryCreator{privateStringsqlTelCampos="SELECT cobranca.TipoCobranca, cobrancaconta.valor, contaTelefone.telefone FROM cgg.cobrancaconta "+"INNER JOIN cgg.cobranca ON (cobrancaconta.idCobranca = cobranca.idCobranca)"+" INNER JOIN cgg.contatelefone ON (cobrancaconta.idConta = contatelefone.idConta) ";publicStringlancaWhere(ArrayList<String>tipoCobranca){Stringcondicao="(";for(inta=0;a<tipoCobranca.size();a++){if(a<tipoCobranca.size()-1){condicao=condicao+" tipoCobranca= '"+tipoCobranca.get(a)+"' OR ";}else{condicao=condicao+" tipoCobranca= '"+tipoCobranca.get(a)+"' )";}}returncondicao;}publicStringmontaConsulta(ArrayList<String>tipoCobranca,intopcao,bytemes,intano){Stringwhere="";if(opcao==0){where=" contatelefone.mes = "+mes+" "+"AND contatelefone.ano = "+ano+" AND"+lancaWhere(tipoCobranca);}elseif(opcao==1){if(mes==01){where=" (contatelefone.mes = 01 OR contatelefone.mes = 02 OR "+"contatelefone.mes = 03) AND contatelefone.ano = "+ano+" AND"+lancaWhere(tipoCobranca);}elseif(mes==02){where=" (contatelefone.mes = 04 OR contatelefone.mes = 05 OR "+"contatelefone.mes = 06) AND contatelefone.ano = "+ano+" AND"+lancaWhere(tipoCobranca);}elseif(mes==03){where=" (contatelefone.mes = 07 OR contatelefone.mes = 08 OR "+"contatelefone.mes = 09) AND contatelefone.ano = "+ano+" AND"+lancaWhere(tipoCobranca);}elseif(mes==04){where=" (contatelefone.mes = 10 OR contatelefone.mes = 11 OR "+"contatelefone.mes = 12) AND contatelefone.ano = "+ano+" AND"+lancaWhere(tipoCobranca);}}where=where+" group by contaTelefone.telefone";//sqlTelCampos = sqlTelCampos+where;//return sqlTelCampos;returnwhere;}}
lordtiago
também crei uma classe para criação de queries mais cabreiras, quando é necessário personalizar o campo a se criar. Esta classe é apenas para testes, visto que não precisei implementar em produção. Contudo estou estudando segundo o Leonardo Glória sugeriu, daí já conseguirei penar menos para criar minhas queries, heheheh
mais uma vez obrigado a todos pela ajuda e segue a classe de exemplo para quem tiver com dificuldades na mesma linha de problema:
publicclassConsultasPersonalizadas{publicstaticArrayList<ContaTelefone>find(ArrayList<String>campos)throwsSQLException{Conexaocon=newConexao();Stringsql="SELECT * from contatelefone ";ResultSetrs=con.consultaDados(sql);ArrayList<ContaTelefone>e=newArrayList<ContaTelefone>();while(rs.next()){ContaTelefonemenu=newContaTelefone();for(inti=0;i<campos.size();i++){if(campos.get(i).equals("idConta"))menu.setIdConta(rs.getInt("idConta"));if(campos.get(i).equals("telefone"))menu.setTelefone(rs.getString("telefone"));if(campos.get(i).equals("mes"))menu.setMes(rs.getByte("mes"));if(campos.get(i).equals("ano"))menu.setAno(rs.getShort("ano"));if(campos.get(i).equals("desconto"))menu.setDesconto(rs.getDouble("desconto"));if(campos.get(i).equals("valorTotal"))menu.setValorTotal(rs.getInt("valorTotal"));}e.add(menu);}returne;}publicstaticvoidmain(Stringargs[]){ArrayList<String>campos=newArrayList<String>();// campos.add("idConta");campos.add("telefone");campos.add("mes");campos.add("ano");// campos.add("desconto");// campos.add("valorTotal");ArrayList<ContaTelefone>dados=newArrayList<ContaTelefone>();try{dados=find(campos);}catch(SQLExceptionex){Logger.getLogger(ConsultasPersonalizadas.class.getName()).log(Level.SEVERE,null,ex);}for(inti=0;i<dados.size();i++){System.out.println("Registro "+i);if(dados.get(i).getIdConta()!=0)System.out.println(dados.get(i).getIdConta());if(dados.get(i).getTelefone()!="")System.out.println(dados.get(i).getTelefone());if(dados.get(i).getMes()!=0)System.out.println(dados.get(i).getMes());if(dados.get(i).getAno()!=0)System.out.println(dados.get(i).getAno());if(dados.get(i).getDesconto()!=0.0)System.out.println(dados.get(i).getDesconto());if(dados.get(i).getValorTotal()!=0.0)System.out.println(dados.get(i).getValorTotal());}}}