Dúvida com query

9 respostas
moacirrox

Bom pessoal estou fazendo um combobox onde quero armazenar o codigo ibge do estado e não o nome, na tabela municipio

String sqlbuscauf = ("select * from estados where nome like'"+cbEstados.getSelectedItem().toString()+"'");
con_estados.executarSQL("sqlbuscauf");
          
JOptionPane.showMessageDialog(null, cbEstados.getSelectedItem());
         
String sqlinsert = "insert into municipios (nome, cod_ibge, cod_estado) values ('"+tfNome.getText()+"', '"+tfCodigoIBGE.getText()+"', '1')";
con_municipios.statement.executeUpdate(sqlinsert);

lembrando que o JOptionPane é apenas para ver se está vindo o nome do estado corretamente, então agora preciso colocar no lugar daquele ‘1’ que está na segunda operação sql, como faço para pegar o valor cod_ibge da tabela estados e colocar no lugar desse ‘1’.

9 Respostas

A

No código abaixo você faz uma consulta, nessa parte você deve retornar o cod_ibge ou o objeto que representa a entidade.

con_estados.executarSQL("sqlbuscauf");

Ficaria algo parecido com o código abaixo:

Estado estado = con_estados.executarSQL("sqlbuscauf"); 
String sqlinsert = "insert into municipios (nome, cod_ibge, cod_estado) values ("+tfNome.getText()+","+tfCodigoIBGE.getText()+"," estado.getCodigoIBGE")";

Obs.: Muda o título do post, isso não é um problema e sim uma dúvida.

Dá uma olhada no PreparedStatement e faz uma pesquisa sobre injeção de SQL

moacirrox
Estado estado = con_estados.executarSQL("sqlbuscauf");

dando erro no Estado, fala para criar uma classe.

D

Bom vamos lá, deixa eu ver se entendi, o código do IBGE você pega a partir do

String sqlbuscauf = ("select * from estados where nome like'"+cbEstados.getSelectedItem().toString()+"'"); con_estados.executarSQL("sqlbuscauf"); é isso?

Mas e aê você busca mas não faz mais nada com essa informação?
Nessa parteString sqlinsert = "insert into municipios (nome, cod_ibge, cod_estado) values ('"+tfNome.getText()+"', '"+tfCodigoIBGE.getText()+"', '1')";
Os textField são carregados pelo BD ou pelo o que o usuário digitou. Se possível poste a mais partes do código para ficar mais simples de te ajudar.

EDIT: Lembrando que o que o Alberes postou nessa parte Estado estado = con_estados.executarSQL("sqlbuscauf");
Ele considerou que você tivesse a classe estado criada para poder manipular mais facilmente os dados.

moacirrox

carrega a partir da db, ele lista todos os estados cadastrados na database.

con_estados.executarSQL("select * from estados order by nome");

while(con_estados.resultset.next()){
             cbEstados.addItem(con_estados.resultset.getString("nome"));
        }

ai nessa query eu busco o resultado que o cara deixou selecionado no combobox, para pegar o codigo_ibge

String sqlbuscauf = ("select * from estados where nome like'"+cbEstados.getSelectedItem().toString()+"'");    
con_estados.executarSQL("sqlbuscauf");

ai preciso inserir na query de municipios na hora do cadastro, sendo que o municipio é vinculado ao codigo_ibge do estado que ele deixou selecionado.

D

Então quando você faz a busca de estado você pode pegar no resultset dela a coluna com o código do IBGE e adicionar em uma variável e usar essa variável depois.

moacirrox

humm… mais como faria isso? pensei nisso mesmo, pois no php resolveria isso com apenas 1 query, ja no java vo fazendo minhas gambiarras xD

D

String sqlbuscauf = ("select * from estados where nome like'"+cbEstados.getSelectedItem().toString()+"'"); con_estados.executarSQL("sqlbuscauf");

Nessa parte você pega o todas as informações do estado não pega?
quando faz o resultSet pegar a coluna cod_ibge

String cod = con_estados.resultSet(“cod_ibge”);

Isso é um exemplo por cima. Depende muito da estrutura do seu código.

moacirrox

nossa mãe ficou meio que um bonde das loucas essa gambiarra que fizemos kakakaka, mais deu certo xD!

try{
        String sql = "select * from estados Where nome like '"+cbEstados.getSelectedItem()+"'";
        con_estados.executarSQL(sql);
        con_estados.resultset.first();
        String cod = con_estados.resultset.getString("cod_ibge");
        
        String sqlinsert = "insert into municipios (nome, cod_ibge, cod_estado) values ('"+tfNome.getText()+"', '"+tfCodigoIBGE.getText()+"', '"+cod+"')";
        con_municipios.statement.executeUpdate(sqlinsert);
        JOptionPane.showMessageDialog(null, "Município efetuado com sucesso");
        cancelar_cadastro();
        preencher_posacao(); 
    }
    catch(SQLException erro){
        JOptionPane.showMessageDialog(null, "Problemas ao cadastrar município");
        cancelar_cadastro();
    }

Obrigado Danilo.

D

de nada Moacir, não é gambiarra nenhuma não, você poderia fazer de diversas maneiras, por exemplo armazenar em um ArrayList, dei uma solução por cima apenas para resolver agora que está com mais urgência. Têm várias maneiras, inclusive usando hashMap. Tudo depende do seu programa :smiley:

Criado 6 de dezembro de 2011
Ultima resposta 6 de dez. de 2011
Respostas 9
Participantes 3