Consulta SQL retorna apenas uma cidade por estado, precisa retornar todas cidade
21 respostas
javamysql
D
Diego_Gomes_Dias
Ola galera, fiz uma consuta pra retornar todas as cidade de um estado, porem gostaria de retornar apenas as cidades de um estado especifico quando seleciono.
Como fazer?
Classe CidEstDao
publicCidadegetCidadeByEstado(Stringnom_cidade)throwsSQLException{Stringselect="SELECT * FROM cidade WHERE estado = ?";Cidadecidade=null;PreparedStatementstmt=getConnection().prepareStatement(select);stmt.setString(1,nom_cidade);ResultSetrs=stmt.executeQuery();while(rs.next()){cidade=newCidade();cidade.setNom_cidade(rs.getString("nom_cidade"));}rs.close();stmt.close();returncidade;}
Enquanto estiver no while ele ira sobrescrever o objeto anterior. Nesta situação, ele ira manter o objeto na lista.
M
Mat_myself
isso, trabalharia com array… mas man, vc tá usando certo a variável nom_cidade? pq hora vc usa como variável de cidade, hora como variável de estado, ex:
A tabela se chama cidade
A coluna se chama nom_cidade
E tem uma coluna estado onde contem o estado referente a cidade
Eu alterei conforme o jonathan.sky disse e esta dando erro refetente a minha tela principal, vou postar aqui como esta as tres classes
Classe CitEstDao
publicList<Cidade>getCidadeByEstado(Stringnom_cidade)throwsSQLException{Stringselect="SELECT nom_cidade FROM cidade WHERE estado = ?";Cidadecidade=null;PreparedStatementstmt=getConnection().prepareStatement(select);List<Cidade>cidades=newLinkedList<Cidade>();stmt.setString(1,nom_cidade);ResultSetrs=stmt.executeQuery();while(rs.next()){cidade=newCidade();cidade.setNom_cidade(rs.getString("nom_cidade"));cidades.add(cidade);}rs.close();stmt.close();returncidades;}
Alguem pode me ajudar a como consultar a tabela cidade conforme a coluna estado?
M
Mat_myself
mano, eu tava dando uma olhada… vc colocou SELECT * FROM cidade WHERE estado = ?
nao seria SELECT nom_cidade FROM cidade WHERE estado = ? pq vc quer somente o nome da cidade de determinado estado, não é? ai se o estado fosse SP ele iria retornar itupeva, jundiai, sao paulo, cabreuva, etc
D
Diego_Gomes_Dias
ja alterei, coloquei nom_cidade mas continua dando erro, no dao ou no principal.
Eu agradeço a todos pela força mas todas as allternaticas acima estao retornando erro.
J
jonathan.sky
não é erro, você também deve tratar a exceção que está sendo jogada
Se a exceção não for tratada em nenhum nível e lançada de camada em camada a ide vai continuar te avisando.
clicka na lampada, ele ira te pedir para adicionar um try-catch ou cobrir ele para jogar em quem chamar. E além disso tem uma outra coisa, você só pode chamar um método de uma outra classe dentro de algum método ou na main.
privatevoidonClickLocalizar(){CidEstControllercc=newCidEstController();try{List<Cidade>c=(Cidade)cc.buscaCidadePorEstado("São Paulo");for(Cidadecidade:c)System.out.println(c.getNom_cidade());}catch(SQLExceptione){JOptionPane.showMessageDialog(this,"Ocorreu um erro, tente novamente!n"+e.getLocalizedMessage());}catch(NullPointerExceptione){JOptionPane.showMessageDialog(this,"Contato não localizdo ou não existe!n"+e.getLocalizedMessage());}}
D
Diego_Gomes_Dias
Sinceramente eu to quase desistindo, revirei a internet, ja fiz milhares de formas pra consuta mas estou mantendo essa
Classe DAO
publicList<Cidade>getCidadeByEstado(Stringnom_cidade)throwsException{Stringselect="SELECT nom_cidade FROM cidade WHERE estado = ?";Cidadecidade=null;PreparedStatementstmt=getConnection().prepareStatement(select);List<Cidade>cidades=newArrayList<Cidade>();stmt.setString(1,nom_cidade);ResultSetrs=stmt.executeQuery();while(rs.next()){cidade=newCidade();cidade.setNom_cidade(rs.getString("nom_cidade"));cidades.add(cidade);}rs.close();stmt.close();returncidades;}
Se alguem souber fazer uma consulta com array pra que retorne mais de uma informação eu agradeço.
R
Rafa_Lpark
Na verdade fui eu que errei
privatevoidonClickLocalizar(){CidEstControllercc=newCidEstController();try{List<Cidade>c=(Cidade)cc.buscaCidadePorEstado("São Paulo");for(Cidadecidade:c)System.out.println(cidade.getNom_cidade());// aqui estava meu erro. coloquei a variavel c e correto é cidade.}catch(SQLExceptione){JOptionPane.showMessageDialog(this,"Ocorreu um erro, tente novamente!n"+e.getLocalizedMessage());}catch(NullPointerExceptione){JOptionPane.showMessageDialog(this,"Contato não localizdo ou não existe!n"+e.getLocalizedMessage());}}
J
jonathan.sky
Acredito que essa conversão esteja errada, pois o busca Por estado devolve o tipo lista, se fizer isso dará erro de conversão.
Além da conversão citada pelo jonathan.sky, acredito que seria interessante você testar sua consulta no banco primeiro para ver se realmente está retornando o resultado como você quer.
Meu primeiro post no forum, espero estar contribuindo
D
Diego_Gomes_Dias
Deu praticamente tudo certo, ele retornou os estados mas apenas imprime se o comando estiver dentro do método.
mas nehuma das vezes eu consigo pegar o metodo para relacionar a uma combobox
e tbm criei um mesmo MODELO de consulta pra retornar uma quantidade de produtos X pra somar mas como não consigo trabalhar com o retorno do metodo eu to meio perdidao.