ArrayList

52 respostas
Veneno

Olá…
gostaria de saber como pego os dados do banco e jogo em uma ArrayList??
eu queria pegar o nome e o codigo …
se alguem puder ajudar vlw…
abraço… :smiley:

52 Respostas

cassio

Olá!

Crie um classe que tenha como atributos o nome e o código. Crie para esta classe um construtor que já receba estes dois parâmetros.

faça algo do tipo:

ArrayList objetos = new ArrayList();
while(seuResultSet.next()){
   String nome = ... //pegue o campo nome
   String codigo =... //pegue o campo codigo
   objetos.add(new suaClasse(codigo, nome));
}

Abraço!

Veneno

oh eu fiz isso cassio...
criei a classe lista com os atributos ... e o seguinte codigo...

public ArrayList getDados5(String s){    
        
        ArrayList objeto = new ArrayList();
        
        String codigo, nome;
        if(conn){
            if(connection != null){
                try{
                    ps = connection.prepareStatement("select nome,codigo from Funcionario where codigo = ? order by nome;");
                    ps.setString(1,s);
                    rs = ps.executeQuery(); 
                    
                    while(rs.next()){
                     
                        nome = rs.getString("nome");
                        codigo = rs.getString("codigo");
                        objeto.add(new Lista(codigo, nome)); 
                    }
                }catch(SQLException e){
                    System.out.println(e.getMessage());
                    System.out.println("Não ta fazendo.");
                }
            }            
        }           
        return objeto;
    }

ta certo???
se sim ...
gostaria de saber como pegar o resultado em um JComboBox...
vlw

cassio

Olá

Aparentemente está certo, não posso afirmar pois não vi sua classe Lista.
Vc não testou? Teste e imprima no console quantos elementos tem seu ArrayList quando sair do while…

System.out.println(seuArrayList.size());

Para alimentar um combox a partir deste ArrayList

JComboBox combo = new JComboBox(seuArrayList.toArray());

Abraço!

Veneno

Hum não to conseguindo fazer o teste ...

eu mudei umas coisas ..
vo posta o codigo da classe Lista

public class Lista {
    String Nome;
    String Codigo;
   
    
    public Lista() {
        }
    
    public Lista(String nome, String codigo){
        this.Nome = nome;
        this.Codigo = codigo;
    }
    public String getNome(){
        return Nome;
    }
    public void setNome(String Nome){
        this.Nome = Nome;
    }
    public String getCodigo(){
        return Codigo;
    }
    public void setCodigo(String Codigo){
        this.Codigo = Codigo;
        
    }
}

e esse código ta na classe banco ...

public ArrayList getDados5(Lista l){//verifica o codigo       
      
        ArrayList objeto = new ArrayList();
        
        String codigo, nome;
        
        if(conn){
            if(connection != null){
                try{
                    ps = connection.prepareStatement("select nome,codigo from Funcionario where codigo = ? order by nome;");
                    ps.setString(1,l.getCodigo());
                    rs = ps.executeQuery(); 
                    
                    while(rs.next()){
                       // aux += (rs.getInt("Codigo") + " - " + rs.getString("Nome") + " - " + rs.getString("Telefone") + "\n");
                        nome = rs.getString("nome");
                        codigo = rs.getString("codigo");
                        objeto.add(new Lista(codigo, nome)); 
                    }
                    System.out.println(objeto.size()); 
                    
                }catch(SQLException e){
                    System.out.println(e.getMessage());
                    System.out.println("Não ta fazendo.");
                }
            }            
        }           
        return objeto;
    }

e eu queria chamar ele de uma outra classe ...

abraço ...

cassio

Mas o que está acontecendo, está caindo na exceção?!

E porque seu método recebe um objeto da classe Lista?

Veneno

vixii eu to perdido …rs
axeei q fosse assim …
qqr coisa dexa …
vlw abraço

cassio

Não poxa, chegamos tão longe pra vc largar mão?
Explica ai, dá algum erro? O que tá rolando?!

Veneno

ae vlw veio …
eh assim eu tenho a classe Lista a Classe Banco e eu tenho uma outra classe que uma tela … que tem o JComboBox…
e eu teria q chamar da classe tela nao eh ??
pra compilar …
eu to meio perdido … vc flw do objeto ali … como ficaria ?

Veneno

Alguem poderia me ajudar ???

cassio

Esse seu método que retorna um ArrayList está dentro da classe Banco?

Sua classe que tem a tela é a que tem o main?

Se for este o caso, vc pode declarar um objeto do tipo Banco na classe que tem a tela e chamar o método que da classe Banco que retorna o ArrayList a partir deste objeto, passando o retorno como

seuComboBox = new JComboBox(seuArrayList.toArray());

E assim inicializando o seu combo :slight_smile:

Veneno

puts cassio, nao to conseguindo

public void combo(){

    fornec1.removeAllItems();
 	
          Banco banco = new Banco();
        
         banco.getDados5();
         fornec1 = new JComboBox(objeto.toArray());

eh mais o menos assim ???
vlw …

cassio

Péra ai… se o seu combo já existe antes de vc alimentar, então vc tem que alterar o model dele… Quem define quais itens serão exibidos no combo na verdade é o model associado a ele.
Agora, se vc simplesmente cria a janela com os itens ja incluidos no combo box, o usuáfrio seleciona o que quer e depois sai da janela, sem que os itens sofram alterações, vc pode instanciar um novo combo box recebendo o array sem problemas. Se o seu combo box for mudando, fica mais complicado adicionar os itens dessa forma, sem ter que alterar diretamente o model. Acho melhor vc limpar tudo e depois usar um laço que percorra o ArrayList e vá adicionando os itens um a um no combo… sacou?

Se o combo for criado na inicialização da janela e depois não sofrer alterações

Banco banco = new Banco();
//... mais do seu código ...
fornec1 = new JComboBox(banco.getDados5().toArray());
//... mais do seu código ...

Se o seu combobox, em algum momento, seja totalmente alterado, recebendo novos itens (um exemplo)

ArrayList dados = banco.getDados5();
fornec1.removeAllItems();
//adicionando todos os itens do ArrayList ao seu JComboBox
for(int i = 0; i < dados.size(); i++)
   fornec1.addItem(dados.get(i));

Qualquer coisa posta ai,

Abraço!

Veneno

amigo ta dando um erro no getDados5();

ArrayList dados = banco.getDados5();

fornec1.removeAllItems();

//adicionando todos os itens do ArrayList ao seu JComboBox

for(int i = 0; i < dados.size(); i++)

fornec1.addItem(dados.get(i));

colokei dessa forma …
abraço …vlw :smiley:

cassio

Fica dificil saber o problema se vc não colar o erro ai… :slight_smile:

Veneno

ah sim rs … foi mal …

getDados5(java.lang.String) cannot be applied to()

Veneno

sabe o q eh??

Veneno

Alguem pode me ajudar com esse erro??

obrigado…

kaabah
getDados5(java.lang.String) cannot be applied to()

Vc deve estar chamando o método getDados5 sem nenhum parâmetro, sendo que ele só é aplicável com String como parâmetro.

Acho que é isso! :idea:

Veneno

vc saberia me dizer q parametro devo passar … não to conseguindo …

kaabah

uma string :idea:

Veneno

olá tendo essas classes…
alguem pode me dizer o que esta errado ??

classe tela…

public void combo(){


     	Banco banco = new Banco();
                Lista lista = new Lista();
        
        ArrayList dados = new ArrayList();
        ArrayList dados = banco.getDados5(lista);
        fornec1.removeAllItems();
        
          //adicionando todos os itens do ArrayList ao seu JComboBox
         for(int i = 0; i < dados.size(); i++)
          fornec1.addItem(dados.get(i));

}

classe banco

public ArrayList getDados5(String s){//verifica o codigo       
      
        ArrayList objeto = new ArrayList();
        
        String codigo, nome;
        
        if(conn){
            if(connection != null){
                try{
                    ps = connection.prepareStatement("select nome,codigo from Funcionario where codigo = ? order by nome;");
                    ps.setString(1,s);
                    rs = ps.executeQuery(); 
                    
                    while(rs.next()){
                       // aux += (rs.getInt("Codigo") + " - " + rs.getString("Nome") + " - " + rs.getString("Telefone") + "\n");
                        nome = rs.getString("nome");
                        codigo = rs.getString("codigo");
                        objeto.add(new Lista(codigo, nome)); 
                    }
                    System.out.println(objeto.size());
                    
                }catch(SQLException e){
                    System.out.println(e.getMessage());
                    System.out.println("Não ta fazendo.");
                }
            }            
        }           
        return objeto;
    }

classe Lista

public class Lista {
    String Nome;
    String Codigo;
   
    
    public Lista() {
        }
    
    public Lista(String nome, String codigo){
        this.Nome = nome;
        this.Codigo = codigo;
    }
    public String getNome(){
        return Nome;
    }
    public void setNome(String Nome){
        this.Nome = Nome;
    }
    public String getCodigo(){
        return Codigo;
    }
    public void setCodigo(String Codigo){
        this.Codigo = Codigo;
        
    }
}

vlw galera … :slight_smile:

ozielneto

Este último código que voce fez está errado na chamda do getDados()…

se voce define numa classe um metodo que recebe uma String, entao o chamdor deve chama-lo corretametne…

Acho que sua classe de Tela deveria ficar assim:

public void combo(){

Banco banco = new Banco();
             Lista lista = new Lista();
     
     ArrayList dados = new ArrayList();
   // o valor ALGUM TEXTO vai ser passado no getDados...
     ArrayList dados = banco.getDados5("ALGUM TEXTO");
     fornec1.removeAllItems();
     
       //adicionando todos os itens do ArrayList ao seu JComboBox
      for(int i = 0; i &lt dados.size(); i++)
       fornec1.addItem(dados.get(i));

}

Mas assim acho que seu SELECT nao vai retornar nada… POIS ACHO QUE NAO TEM CODIGO COM O VALOR ALGUM TEXTO…

Boa sorte ai…

[]´s

Mantu

na sua “classe tela”, no método “combo”, vc invoca o método getDado5 passando por parâmetro um objeto do tipo “Lista”

ArrayList dados = banco.getDados5(lista);

Só que este método getDados5, conforme o que está escrito na sua “classe banco”, recebe um objeto do tipo String por parâmetro.
Como não há uma forma de conversão implícita de um objeto Lista para um objeto String, o Java reclama mesmo.
Se eu entendi o que vc tá querendo fazer ali, seria algo assim

ArrayList dados = banco.getDados5(lista.getCodigo());

Veja se isso resolve

Veneno

Mantu… o erro sumiu …
mas no ComboBox nao ta aparecendo nda …
da danto 0 …no

objeto.add(new Lista(codigo, nome));

}
                System.out.println(objeto.size());

Mto obrigadooo…
:thumbup:

Mantu

Será que não é porque a query tá retornando um result set vazio?

Veneno

eu nao sei …:frowning:

vc saberia alguma forma ?

Mantu
Eu acho que a query que o seu programa tá enviando pro banco de dados deve estar retornando um result set vazio, ou seja, não deve estar sendo encontrado no BD nenhum registro com o campo código igual ao código que vc está passando ("getDados5(lista.getCodigo);"). Veja bem: Você está criando primeiro um objeto lista:
Lista lista = new Lista();
E logo depois, você invoca o método pra pegar o ArrayList:
ArrayList dados = banco.getDados5(lista.getCodigo());
Qual o problema com isto? Na sua classe Lista existem dois construtores: Um sem parâmetros e sem nenhum código(chamado "contrutor vazio") e outro que recebe dois Strings. Quando você instancia um objeto da sua classe Lista utilizando o construtor vazio, este objeto terá o valor null associado para os campos "nome" e "codigo". Seria como se o seu contrutor vazio fosse assim:
public Lista(){
        this.Nome = null;
        this.Codigo = null;
    }
Sendo assim, quando voce faz a invocação:
ArrayList dados = banco.getDados5(lista.getCodigo());
O "lista.getCodigo()" vai retornar o valor do campo "Codigo" do objeto lista, que acabos de ver que é igual a null. Este é o grande problema... Você está mandando um null para a query. Sugiro a vc que verifique na sua base de dados algum registro existente, pegue o valor do campo "código" deste registro, instancie um objeto do tipo Lista utilizando este código e aí sim vc passa esse objeto para o getDados5. Supondo que exista na sua tabela do BD um registro que tenha nome=Abobrinha e código=1234:
public void combo(){
 
 
      	Banco banco = new Banco();
        Lista lista = new Lista("Abobrinha", "12345");
         
        ArrayList dados = banco.getDados5(lista.getCodigo());
        //...
 }
Tente isso!
Veneno

Mto Obrigado pela explicação Mantu…
ta mais claro agora …

eu fiz daquele jeito … apareceu q tem 1 ,… ta certo …:smiley:
mas no ComboBox add isso oficina.Lista@db4fa2

oficina eh o nome do meu pacote…

pq sera ??

Mantu

Isso se deve ao seguinte:
Um objeto combo, quando vai ser desenhado na tela, ele “desenha” os itens nele contido de que forma? Invocando o método toString() destes itens. O método toString() é um método presente em todas as classes escritas em Java.
Já ouviu falar que em Java (quase)tudo e objeto? Dizem isso porque toda e qualquer classe criada em java tem uma relação de herança(ou é filha, ou é neta, ou é bisnet, etc…) com a classe Object. A classe object provê alguns métodos, e um destes métodos é o toString(). A idéia deste método é permitir que se estabeleça uma descrição textual de um objeto. Como a classe Object representa um conceito meio vago (um “objeto”… e daí?..), a descrição textual fornecida pelo método toString() desta classe é também meio vaga, genérica. Esta descrição é exatamente a descrição que apareceu no seu combo.
Como disse antes, o combo, pre “escrever” seu conteúdo, chama o método toString() de cada item nele inserido. No seu caso, temos um item apenas, que é um objeto Lista. Como a sua classe Lista não sobrescreve o método toString(), herdado da classe Object(), quando o combo - internamente - pede “Ou, objeto Lista! Faz o favor de executar o seu método toString() e me dê o String retornado, blz?”, o seu objeto verifica que não há na classe dele (Lista) um método chamado “toString()”, então ele procura por este método dentre aqueles herdados. Como a sua classe Lista não tem uma declaração de extends, isto quer dizer que ela, implicitamente, herda de Object. Assim, o objeto lista procura na classe Object algum método “toString()” e, de fato, encontra. Ao ser encontrado, o método é executado e o String retornado é entregue ao combo, que por sua vez escreve este String na “caixinha” da sua tela.
Perceba que o método toString que foi efetivamente executado é o toString definido na classe Object, que faz aparecer essa coisa estranha com um “@” no meio.
Pra você resolver isso, basta então você sobrescrever o método toString() na sua classe Lista, definindo assim uma descrição textual para os objetos desta sua classe. Vamos supor que vc queira descrever textualmente um objeto Lista da seguinte forma:
(nome=Abobrinha, codigo=12345)
Vc teria que colocar um método toString na sua classe Lista, desta forma:

public String toString(){
	return "(nome=" + Nome + ", código=" + Codigo + ")";
}

Experimente isto, e veja o que acontece. Depois, se desejar, vc pode mudar a forma como o item aparece no seu combo mudando a forma como você implementa este método toString().
A título de curiosidade, aquela bizarrice apresentada pelo toString() da classe Object. Aqui vai como está implementado o código do toString() nesta classe:

public String toString() {
   return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Veneno

vlw Mantu…
mas eh soh coloca o metodo toString() na classe lista ???
eu coloquei e continua igual…
ou eu tenho que chama-lo ???
abraço …

Veneno

Ah, não …
deu certo sim …
mto Obrigado Mantu…

pra carregar todos os nomes e os codigos…
sem precisar digitar …
como eu faço??
vlw amigo…

Mantu

Qual é a chave primária dessa sua tabela?

Veneno

Ola Amigo …
a chave primária eh Código …
vlw abraço…

Veneno

alguem sabe???
obrigado…

Mantu

Ve se isso funciona:

public ArrayList getTodosDados(){//verifica o codigo       
       
         ArrayList objeto = new ArrayList();
         
         String codigo, nome;
         
         if(conn){
             if(connection != null){
                 try{
                     ps = connection.prepareStatement("select nome,codigo from Funcionario order by nome;");
                     rs = ps.executeQuery(); 
                     
                     while(rs.next()){
                        // aux += (rs.getInt("Codigo") + " - " + rs.getString("Nome") + " - " + rs.getString("Telefone") + "\n");
                         nome = rs.getString("nome");
                         codigo = rs.getString("codigo");
                         objeto.add(new Lista(codigo, nome)); 
                     }
                     System.out.println(objeto.size());
                     
                 }catch(SQLException e){
                     System.out.println(e.getMessage());
                     System.out.println("Não ta fazendo.");
                 }
             }            
         }           
         return objeto;
     }

Utiliza este método pra carregar o seu ArrayList

Veneno

mas na tela eu chamo assim ???

public void combo(){


        Banco banco = new Banco();
        Lista lista = new Lista();
        
       
        ArrayList dados = banco.getTodosDados();
        fornec1.removeAllItems();
        
          for(int i = 0; i < dados.size(); i++)
          fornec1.addItem(dados.get(i));
}

soh assim não ta fazendo …

abraço …

Veneno

ah, não deu certo sim mantu rsrs… fiz assim …

public void combo(){
     	
       Banco banco = new Banco();
        Lista lista = new Lista("","");
        
       ArrayList dados = banco.getTodosDados(lista);
        fornec1.removeAllItems();
        
          
         for(int i = 0; i < dados.size(); i++)
          fornec1.addItem(dados.get(i));
}

e no no metodo eu coloquei assim :

public ArrayList getTodosDados(Lista l){//verifica o codigo

eh assim ???
vlw abraço…

Mantu

Você não precisa passar um Lista pro método getTodosDados(). Perceba que em momento algum deste método, este parâmetro que vc criou é utilizado.
Do jeito que eu postei, supostamente era pra funcionar, por que, afinal, vc faz a query pedindo, indistintamente, todos os registros lá da tua tabela; Com cada registro, vc cria um objeto Lista; adiciona esse Lista em um ArrayList; e finalmente, retorna o ArrayList, cheeeeio de objetos Lista.

Veneno

Verdadiii Mantu…
deu certinho agora…
vlw amigo pela ajuda e pelas explicações
abraço…
:thumbup:

Veneno

Bom dia Galera …
tenho uma dúvida …
o meu JComboBox ta aparecendo o nome …
e na ArrayList tem o nome e o codigo …
gostaria de saber como eu faço pra continuar vendo o nome mas salvar somente o codigo no Banco …

eu tava tentando algo do tipo:

String fornec   = ((Lista)fornec1.setSelectedItem(codigo));

abraço galera

Mantu

Quem é “fornec1”? Tá muito confusa essa sua pergunta… tem como explicar melhor?

Veneno

opa tem sim …

fornec1 eh o meu comboBox…

no meu combo ta aparecendo o nome… e no ArrayList tem o nome e o codigo … eu gostaria de qnd eu clicasse no botão salvar … ele nao pegasse o nome … mas sim o codigo do nome …

eu tava fazendo assim :

String fornec   = fornec1.getSelectedItem().toString();

mas assim ele salva o q ta no combo …
queria no comobo aparecesse o nome mas na hora de salvar ele pegasse o codigo …

não se ta mais claro … qqr coisa eu tento explicar novamente…

abraço…

Mantu

Tenta assim:

String fornec   = ((Lista)fornec1.getSelectedItem()).getCodigo();
Veneno

AEEEE …
mais uma vez obraigadoo …
deu certinhoo rs…
abraço

Veneno

Eai pessoal tenho uma duvida …
tava querendo fazer algo assim:

eu tenho o ComboBox que aparece o nome … mas na ArrayList tem tudo … nome, end, cidade …etc
eu queria q qnd eu escolhesse o nome… ele preenchesse os outros campos … eu tava tendo assim … achei q daria certo … mas nao da …

String end = ((Cliente)busca.getSelectedItem()).getEndereco();
        Endereco1.setText(end);

//busca eh nome do meu ComboBox…

não da erro mas tb nao roda …
vlw abraço amigos…

Veneno

ah, eu coloquei isso dentro do codigo…
*** :thumbup:

Veneno

Dentro do Codigo nao … desculpa …
dentro do ComboBox …

Alguem poderia me ajudar ?

obrigado …

Mantu

Uma alternativa seria vc fazer algo assim:

Cliente cli = (Cliente)busca.getSelectedItem();
Endereco1.setText(cli.getEndereco());
campoDeTextoParaONome.setText(cli.getNome());
campoDeTextoParaOCpf.setText(cli.getCPF());
//E assim por diante...
Veneno

Tentei fazer…
mas está dando o seguinte :

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

oq sera?

Veneno

tipo o Codigo tava dentro do ActionPerformed do ComboBox…
e tava dando isso …
aí colokei em um Botão e deu certo …
alguem sabe pq ??
como devo fazer …??

vlw galera

ozielneto

Voce pode comprar o libro Entendendo e Dominando o Java, Editora Digerati, que possui nos capítulos exatamente o que voce procura…

https://www.linuxmall.com.br/?page=categ%2Fbrowse&action=vote&product_id=0&categ=917&action=search&titulo=&editora=0&isbn=&author=Oziel&Submit=Pesquisar

At,

Veneno

eh ozielneto,
acho q vou fazer isso msm …
mto obrigado pela sua ajuda ,…
foi de grande utilidade… não sei como não tive essa ideia antes…rs
desse jeito resolverei todos os meus problemas…

vlw cara …
um abraço bem forte pra vc …

Criado 9 de novembro de 2006
Ultima resposta 20 de nov. de 2006
Respostas 52
Participantes 5