Retorno da consulta em JTextfield

20 respostas
R
Bom dia gurizada, sei que tem milhares de topicos iguais a este aqui, e na web, mas realmente esta penoso para conseguir oque quero, então lá vai, tenho a classe CorreiosBean:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.financeira.correios;

/**
 *
 * @author rafael
 */
public class CorreiosBean {
    public CorreiosBean(){
}

    private Integer id;
    private String logradouro;
    private String complemento;
    private String cep;
    private String bairro;
    private String cidade;
    private String uf;

    /**
     * @return the id
     */
    public Integer getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * @return the logradouro
     */
    public String getLogradouro() {
        return logradouro;
    }

    /**
     * @param logradouro the logradouro to set
     */
    public void setLogradouro(String logradouro) {
        this.logradouro = logradouro;
    }

    /**
     * @return the complemento
     */
    public String getComplemento() {
        return complemento;
    }

    /**
     * @param complemento the complemento to set
     */
    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    /**
     * @return the cep
     */
    public String getCep() {
        return cep;
    }

    /**
     * @param cep the cep to set
     */
    public void setCep(String cep) {
        this.cep = cep;
    }

    /**
     * @return the bairro
     */
    public String getBairro() {
        return bairro;
    }

    /**
     * @param bairro the bairro to set
     */
    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    /**
     * @return the cidade
     */
    public String getCidade() {
        return cidade;
    }

    /**
     * @param cidade the cidade to set
     */
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    /**
     * @return the uf
     */
    public String getUf() {
        return uf;
    }

    /**
     * @param uf the uf to set
     */
    public void setUf(String uf) {
        this.uf = uf;
    }
}
a classe CorreiosControl
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.financeira.correios;

import br.com.financeira.acesobd.AcessoPostgres;
import br.com.financeira.cliente.ClienteBean;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author rafael
 */
public class CorreiosControl {
    PreparedStatement pstm;
    ResultSet rs;
    AcessoPostgres bd = new AcessoPostgres();
   
    String consultaCep = "SELECT * FROM CORREIOS_CEPS WHERE CEP LIKE ?";
    
     public CorreiosControl(){
}


public List<CorreiosBean> listarCep(String cep){
        List<CorreiosBean> correios = new ArrayList();
        try{
            pstm = bd.conectar().prepareStatement(consultaCep);
            pstm.setString(1, cep);//SELECT * FROM CLIENTES WHERE NOME LIKE rafa
            rs = pstm.executeQuery();
            CorreiosBean cor;
            while (rs.next()){
                cor = new CorreiosBean();
                cor.setId(rs.getInt("id"));
                cor.setLogradouro(rs.getString("logradouro"));
                cor.setCep(rs.getString("cep"));
                cor.setBairro(rs.getString("bairro"));
                cor.setCidade(rs.getString("cidade"));
                cor.setUf(rs.getString("uf"));
                correios.add(cor);
            }
            bd.desconectar();
        } catch(Exception e){
            e.printStackTrace();
        }
        return correios;
    }


    


}
e esse form, a classe Clientes onde ele popula uma jtable
protected void listarCep(){
        CorreiosControl cli = new CorreiosControl();
        correios = cli.listarCep("%" + tfPesquisaCep.getText().trim() + "%");
        mostrarCep(correios);
        
    }

    protected void mostrarCep(List<CorreiosBean> correios){
        while (tmCorreios.getRowCount() > 0){
            tmCorreios.removeRow(0);
        }
        
        if (correios.size() == 0){
            JOptionPane.showMessageDialog(this, "Nenhum cep encontrado!");
        }else{
            String [] campos = new String[] {null, null, null, null, null};
            for (int i = 0; i < correios.size(); i++){
                tmCorreios.addRow(campos);
                tmCorreios.setValueAt(correios.get(i).getCep(), i, 0);
                tmCorreios.setValueAt(correios.get(i).getLogradouro(), i, 1);
                tmCorreios.setValueAt(correios.get(i).getBairro(), i, 2);
                tmCorreios.setValueAt(correios.get(i).getCidade(), i, 3);
                tmCorreios.setValueAt(correios.get(i).getUf(), i, 4);
            }
        }
    }

Oque acontece é que não consigo de maneira alguma ao inves de popular a jtable, trazer os resultados em campos de texto.
desde já obrigado

20 Respostas

yhhik

esse seu método que retorna um lista vai trazer apenas um coreio na lista ou vários?
se trazer vários, o problema vai ser selecionar o que vc quer e passar ele para os textfield's.
seria melhor vc escolher ele na Jtable e depois passar para o textfield.

se trazer so um seria melhor alterar o retorno do metodo:

public CorreiosBean listarCep(String cep){   
      
        try{   
            pstm = bd.conectar().prepareStatement(consultaCep);   
            pstm.setString(1, cep);//SELECT * FROM CLIENTES WHERE NOME LIKE rafa   
            rs = pstm.executeQuery();   
            CorreiosBean cor;   
            while (rs.next()){   
                cor = new CorreiosBean();   
                cor.setId(rs.getInt("id"));   
                cor.setLogradouro(rs.getString("logradouro"));   
                cor.setCep(rs.getString("cep"));   
                cor.setBairro(rs.getString("bairro"));   
                cor.setCidade(rs.getString("cidade"));   
                cor.setUf(rs.getString("uf"));   
               return cor;   
            }   
            bd.desconectar();   
        } catch(Exception e){   
            e.printStackTrace();   
        }   
        return null;   
    }

para preencher o textfield faça assim:

protected void listarCep(){   
       CorreiosBean correiosBean=new CorreiosBean();
       CorreiosControl cli = new CorreiosControl();   
       correiosBean = cli.listarCep("%" + tfPesquisaCep.getText().trim() + "%");   
       
       textField.setText(correiosBean.getCampo()) ;
   }
fernandopaiva

Fazer isso é bem simples.

veja.

//bean
public class CorreiosBean{
     private Integer id;
     private String cep;
     //get e set
}


//DAO
public class CorreiosDAO {
     private Connection con;
public CorreiosDAO(){
    this.con = Conexao.getConnection();
}
public List<CorreiosBean> listarCep(String cep){
       List<CorreiosBean> lista = new ArrayList<CorreiosBean>();
       PreparedStatement stm = this.con.prepareStatement("SELECT * FROM correios WHERE cep = ?");
       stm.setString(1, cep);
       ResultSet rs = stm.executeQuery();
       while(rs.next()){
             CorreiosBean cb = CorreiosBean();
             cb.setId(rs.getInt("id"));
             cb.setString(rs.getString("cep"));
             lista.add(cb);
       }
       rs.close();
       stm.close();
       return lista;
}
}


//pegando os valores no FORM
List<CorreiosBean> lista = new CorreiosDAO().listarCep("14.114-000");
for(CorreiosBean cb : lista){
       id.setText(String.valueOf(cb.getId()));
       cep.setText(cb.getCep());
}

Simples.

t+ e boa sorte.

R

vlw gurizada, muito obrigado mesmo, realmente bem simples, mas não tava conseguindo, é só para um correio mesmo, digita o cep no
tfPesquisaCpf

correios = cli.listarCep("%" + tfPesquisaCep.getText().trim() + "%");

e a intenção seria retornar rua, bairro, cidade, uf … apenas referente ao cep.

R
bah gurizada agora deu certo, porém uma pequena duvida:
String consultaCep = "SELECT * FROM CORREIOS_CEPS WHERE CEP LIKE ?";
    
     public CorreiosControl(){
}



public CorreiosBean listarCep(String cep){     
        
        try{     
            pstm = bd.conectar().prepareStatement(consultaCep);     
            pstm.setString(1, cep);//SELECT * FROM CLIENTES WHERE NOME LIKE rafa     
            rs = pstm.executeQuery();     
            CorreiosBean cor;     
            while (rs.next()){     
                cor = new CorreiosBean();     
                cor.setId(rs.getInt("id"));     
                cor.setLogradouro(rs.getString("logradouro"));     
                cor.setCep(rs.getString("cep"));     
                cor.setBairro(rs.getString("bairro"));     
                cor.setCidade(rs.getString("cidade"));     
                cor.setUf(rs.getString("uf"));     
               return cor;     
            }     
            bd.desconectar();     
        } catch(Exception e){     
            e.printStackTrace();     
        }     
        return null;     
    }

se eu coloco a string sql como

String consultaCep = "SELECT * FROM CORREIOS_CEPS WHERE CEP LIKE ?";

ele me retorna outra rua que não é esse cep

se eu coloco como
String consultaCep = "SELECT * FROM CORREIOS_CEPS WHERE CEP = ?";

ele me da estes erros:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at br.com.financeira.view.Clientes.listarCep(Clientes.java:1708)
	at br.com.financeira.view.Clientes.btPesquisaCepActionPerformed(Clientes.java:1403)
	at br.com.financeira.view.Clientes.access$500(Clientes.java:38)
.........

desde já vlw pelas dicas

yhhik

aparentemente ta td certo…

ele ta dando erro na view click na linha do erro e olhe onde é.

eu falei pra vc alterar o tipo de retorno… se vc usa esse metodo em outro lugar tem que alterar lá tbm.

R

tentei mudar o retorno mas não me dei… e qualquer cep que eu digite ele sempre traz o mesmo endereço

yhhik

estranho cara criei o msm método aqui para fazer um teste e está funcionando.

public  Correio  retornaCorreio(String cep){

	       try {
	           String sql = "SELECT * FROM CORREIO WHERE CEP=?";
	           ResultSet rs = executeQuery(sql,cep);
	           while(rs.next()){
	        	    Correio cor = new Correio();
	        	    cor = new CorreiosBean();       
	                cor.setId(rs.getInt("id"));       
	                cor.setLogradouro(rs.getString("logradouro"));       
	                cor.setCep(rs.getString("cep"));       
	                cor.setBairro(rs.getString("bairro"));       
	                return cor;
	      	     
	           }
	          

	       } catch (SQLException ex) {
	           Logger.getLogger(CorreioDAO.class.getName()).log(Level.SEVERE, null, ex);
	          
	       }

	    return null;
	   }

seu método que passa o cep está passando o cep correto?
tente passar na mão msm pra vê se funciona.

correio=retornaCorreio("14.114-000");
 System.out.println(correio.getCep+","+correio.getId());
aqui está funcionando.
R

cara realmente fiz tudo mas não esta rolando, alterei o codigo e tudo o mais e nada era.
se eu dou o select direto no banco ele funciona

R
se ao invés de
protected void listarCep(){     
       CorreiosBean correiosBean=new CorreiosBean();  
       CorreiosControl cli = new CorreiosControl();     
      correiosBean = cli.listarCep("%" + tfPesquisaCep.getText() + "%" );     
         
       tfRua.setText(correiosBean.getLogradouro()) ;  
   }
eu colocar assim:
protected void listarCep(){     
       CorreiosBean correiosBean=new CorreiosBean();  
       CorreiosControl cli = new CorreiosControl();     
      correiosBean = cli.listarCep("96060290");     
         
       tfRua.setText(correiosBean.getLogradouro()) ;
       tfBairro.setText(correiosBean.getBairro());
       tfCidade.setText(correiosBean.getCidade());
       tfUf.setText(correiosBean.getUf());
            
   }

ele me retorna o endereço certinho, provavelmente na hora de pegar o valor do campo onde digito o cep. seria isto?

R
Cara se eu colocar assim ele retorna erro
protected void listarCep(){     
       CorreiosBean correiosBean=new CorreiosBean();  
       CorreiosControl cli = new CorreiosControl();     
      correiosBean = cli.listarCep("%" + tfPesquisaCep.getText() + "%");     
         
       tfRua.setText(correiosBean.getLogradouro()) ;
       tfBairro.setText(correiosBean.getBairro());
       tfCidade.setText(correiosBean.getCidade());
       tfUf.setText(correiosBean.getUf());
            
   }
mas se na linha de onde ele pega o valor do campo de testo eu colocar assim:
protected void listarCep(){     
       CorreiosBean correiosBean=new CorreiosBean();  
       CorreiosControl cli = new CorreiosControl();     
      correiosBean = cli.listarCep("96060290");     
         
       tfRua.setText(correiosBean.getLogradouro()) ;
       tfBairro.setText(correiosBean.getBairro());
       tfCidade.setText(correiosBean.getCidade());
       tfUf.setText(correiosBean.getUf());
            
   }

ele me retorna o endereço certinho.

Sera que o erro esta na hora que ele pega o valor do campo de texto?, derrepente teria de ficar entre aspas, ou aspas simples?

yhhik

cara qual a função desse “%”?

correiosBean = cli.listarCep("%" + tfPesquisaCep.getText() + "%");
R

cara é que eu tenho um outro metodo onde faço uma pesquisa por nome ai uso o ‘LIKE’ no comando sql ai estas % é para digitar uma parte do nome, ai eu copiei a linha inteira, não achei que dese problema, mas já fiz sem este sinal e nada era tbémcorreiosBean = cli.listarCep(tfPesquisaCep.getText().trim());

yhhik

muito estranho… se funciona colocando o cep diretamente… teria que funcionar passando o valor do textfield tbm.
coloca ae println pra vê se ele ta passando o valor correto.

protected void listarCep(){ CorreiosBean correiosBean=new CorreiosBean(); CorreiosControl cli = new CorreiosControl(); System.out.println( tfPesquisaCep.getText() ); correiosBean = cli.listarCep("%" + tfPesquisaCep.getText() + "%");

R

cara não retornou nada, agora nem erro me da mais, só não acontece nada…

R

a não se que eu altere na correiosControl, colocando o LIKE no lugar do =, só que ai ele me traz independente do cep que eu coloco, o mesmo endereço sempre

yhhik

vc só add um System.out.println() e parou de funcionar??
entao o problema ta ae na sua view msm…
no minimo era para ta passando pro console oq vc digitou no textfield.

yhhik

rafaezandinha:
a não se que eu altere na correiosControl, colocando o LIKE no lugar do =, só que ai ele me traz independente do cep que eu coloco, o mesmo endereço sempre

não sei o que pode ser… como eu disse antes eu fiz o msm método e funcionou normalmente.
e fiz so um select normal(SELECT * FROM CORREIO WHERE CEP=?)

public  Correio  retornaCorreio(String cep){   
   
           try {   
               String sql = "SELECT * FROM CORREIO WHERE CEP=?";   
               ResultSet rs = executeQuery(sql,cep);   
               while(rs.next()){   
                    Correio cor = new Correio();   
                    cor = new CorreiosBean();         
                    cor.setId(rs.getInt("id"));         
                    cor.setLogradouro(rs.getString("logradouro"));         
                    cor.setCep(rs.getString("cep"));         
                    cor.setBairro(rs.getString("bairro"));         
                    return cor;   
                   
               }   
                 
   
           } catch (SQLException ex) {   
               Logger.getLogger(CorreioDAO.class.getName()).log(Level.SEVERE, null, ex);   
                 
           }   
   
        return null;   
       }
R
não, na verdade depois que fiz umas alterações na cporreiosControl, ele parou de dar erro no "=", porém não acontecia nada, somente se troco pelo "LIKE", ELE ME TRAZ SEMPRE O MESMO CEP, AGORA tah assim a correiosControl:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.financeira.correios;

import br.com.financeira.acesobd.AcessoPostgres;
import br.com.financeira.cliente.ClienteBean;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author rafael
 */
public class CorreiosControl {
    PreparedStatement pstm;
    ResultSet rs;
    AcessoPostgres bd = new AcessoPostgres();
   
    String consultaCep = "SELECT * FROM CORREIOS_CEPS WHERE CEP = ?";
    
     public CorreiosControl(){
}

CorreiosBean cb = new CorreiosBean();    
    public CorreiosBean listarCep(String cep){     
        
        try{     
            pstm = bd.conectar().prepareStatement(consultaCep);     
            pstm.setString(1, cep);//SELECT * FROM CLIENTES WHERE NOME LIKE rafa     
            rs = pstm.executeQuery();     
            //CorreiosBean cor;     
            while (rs.next()){     
                cb = new CorreiosBean();     
                cb.setId(rs.getInt("id"));     
                cb.setLogradouro(rs.getString("logradouro"));     
                cb.setCep(rs.getString("cep"));     
                cb.setBairro(rs.getString("bairro"));     
                cb.setCidade(rs.getString("cidade"));     
                cb.setUf(rs.getString("uf"));     
               return cb;     
            }     
            bd.desconectar();     
        } catch(Exception e){     
            e.printStackTrace();     
        }     
        return cb;     
    }     



}

é na linha 23 que altero de = para like, só que no = ele nem gera erros, e no like nem mandou para o console...

R

Cara realmente muito obrigado pela ajuda, não que eu seja tapado, mas basicamente eu tinha dois campos de texto, tfPesquisaCep e tfPesquisaCep1, tava para fazer a pesquisa no tfPesquisaCep, e digitava no tfPesquisaCep1, kkkkkkkkkkk, que doidera, vlw…

yhhik

kkkkkkkkkk
cara eu pensei nisso…quando vc falou que nao estava aparecendo a msg no console isso foi a primeira coisa que me veio a cabeça.
mas como é uma coisa meio obvia, pensei que se fosse isso vc já deveria ter achado ae falei que tava na view.

Criado 7 de dezembro de 2011
Ultima resposta 8 de dez. de 2011
Respostas 20
Participantes 3