Map

14 respostas
I

Olá... estou me baseando pelo seguinte código:

import java.util.*; 
   ... 
   public Collection listar() throws EJBException { 
      Collection usuarios = new LinkedList(); 
      try 
      { 
         Map map; 
         Connection con = getConnection(datasourceName); 
         Statement st = con.createStatement(); 

         ResultSet rs = st.executeQuery("select id,nome,login,senha,dt_cadastro,apelido,descricao,email," + 
            "nascimento,site,assinatura,pergunta,email_publico,cadastro_publico,im_publico,icq,messenger " + 
            "from usuario"); 
         while (rs.next()) { 
            map = new TreeMap(); 
            map.put("id", new Long(rs.getLong("id"))); 
            map.put("nome", rs.getString("nome")); 
            map.put("login", rs.getString("login")); 
            map.put("senha", rs.getString("senha")); 
            map.put("dt_cadastro", rs.getDate("dt_cadastro")); 
            map.put("apelido", rs.getString("apelido")); 
            map.put("descricao", rs.getString("descricao")); 
            map.put("email", rs.getString("email")); 
            map.put("nascimento", rs.getDate("nascimento")); 
            map.put("site", rs.getString("site")); 
            map.put("assinatura", rs.getString("assinatura")); 
            map.put("pergunta", rs.getString("pergunta")); 
            map.put("email_publico", (rs.getInt("email_publico") == 1 ? new Boolean(true) : new Boolean(false))); 
            map.put("cadastro_publico", (rs.getInt("cadastro_publico") == 1 ? new Boolean(true) : new Boolean(false))); 
            map.put("im_publico", (rs.getInt("im_publico") == 1 ? new Boolean(true) : new Boolean(false))); 
            map.put("icq", rs.getString("icq")); 
            map.put("messenger", rs.getString("messenger")); 
            usuarios.add(map); 
         } 
         // Liberando recursos "de banco" 
         rs.close(); 
         st.close(); 
         con.close(); 
      } 
      catch (Exception e) 
      { 
         e.printStackTrace(System.out); 
      } 

      //Seu ResultSet encapsulado em uma Collection 
      return usuarios; 
   }

Retornando usuarios como uma collection, como faço para lê-los em outra classe? uma vez que ele foi encapsulado com map...
Já tentei de tudo, mas não consigo transformar ele em map denovo na outra classe.

Gostaria de ver da seguinte maneira:
id = 1234
nome = fulano
email = blablabla

Quem puder me ajudar, serei grato...

14 Respostas

Rafael_Steil

Cada item da tua collection eh um Map, entao eh soh fazer os casts:

...
minhaList = listar();
Iterator iter = minhaList.iterator();

while (iter.hasNext()) {
    TreeMap m = (TreeMap)iter.next();

    String id = m.get("id").toString();
    ...
}
...

Mas o melhor seria voce ter a entidade Usuario e preencher ela, ao inves de jogar em um Map.

Se quiser fazer isso sem precisar saber o nome das keys, pode ser algo como

...
while (iter.hasNext()) {
    Iterator outroIter = ((TreeMap)iter.next()).entrySet().iterator();

    while (outroIter.hasNext()) {
        Map.Entry entry = (Map.Entry)outroIter.next();

        System.out.println(entry.getKey() +" - "+ entry.getValue());
    }
}
...

Rafael

I

Mas o melhor seria voce ter a entidade Usuario e preencher ela, ao inves de jogar em um Map.

Rafael

E como faço isso?

EDITADO

Tava testando esse esquema que você me passou agora e é isso mesmo que eu queria, valeu Rafael!!!

Rafael_Steil

“Igor_Barros”:
Mas o melhor seria voce ter a entidade Usuario e preencher ela, ao inves de jogar em um Map.

Rafael

E como faço isso?

Voce tem que ter a entidade “Usuario” primeiro:

public class Usuario {
    private int id;
    private String nome;
    ...

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return this.id;
    }

    // outros gets and sets 
}

entao, no teu loop do ResultSet, voce faz algo como

while (rs.next()) {
    Usuario user = new Usuario();

    user.setId(rs.getInt("id"));
    user.setNome(rs.getString("nome"));

    ...

    usuariosList.add(user);
}

Entao voce vai ter uma lista com varios objetos do tipo Usuario nele.

Rafael

I

Eu tenho algo como arrumaDB

Eu criei uma entidade chamada ArrumaDB e lá eu dou os gets e sets…
E depois de fazer isso? Eu crio uma list como??? uma linked list ou uma list normal?

EDITADO

Certo, depois de setar tudo? eu não preciso pegar tudo pra armazenar no listusuarios?

Rafael_Steil

A list que voce achar melhor.

Rafael

I

Depois de setar tudo eu preciso getar tudo também não preciso?
Ou se eu colocar listusuarios.add(user) ele já leva tudo?

thiagorani

Isso.
Para cada posição do Collection voce tera um Objeto com todos os atributos encapsulados.
Use os .getXXX() para recuperar os dados em cada iteração!

I

certo… então me diz uma coisa…

depois que eu setar os dados com o user.
Eu faço um lista.add(user.getxxx()) para cada um???

Certo… e na hora de jogar os dados na tela na outra classe? como eu faço o loop?

Rafael_Steil

Nao, nao… voce adiciona o objeto inteiro ( user ), e depois faz um loop pela lista pra pegar cada usuario, como nos exemplos anteriores.

Rafael

I

“Rafael Steil”:
Nao, nao… voce adiciona o objeto inteiro ( user ), e depois faz um loop pela lista pra pegar cada usuario, como nos exemplos anteriores.

Rafael

Mas eu não fui setando os valores?
Se eu adicionar inteiro ele passa?

Rafael_Steil

Realmente nao entendi qual eh a tua duvida agora.

Rafael

I

Um trecho do meu código…

while (rs.next()) { ArrumaDB loop = new ArrumaDB(); loop.setNome(rs.getString("NOME")); loop.setCpf(rs.getString("CPF")); clientes.add(loop); } return clientes;

Certo a minha dúvida é… eu colocando clientes.add(loop) ele vai pegar todos os get do loop e adicionr em clientes? Ou eu tenho que adicionar na mão? tipo assim

clientes.add(loop.getNome());

clientes.add(loop.getCpf());

Entendeu?

E cara, ainda tô com dúvidas quanto a ler essa lista no outro class… se você pudesse fazer uma receitinha de bolo…

Desde já… obrigado

Rafael_Steil

A maneira que voce colocou o codigo esta certa… voce popula a entidade e entao adiciona ela na lista.

Para ver como usar em outra classe, eh soh ver os primeiros exemplos que eu postei no inicio do topico. Ou seja: voce chama esse listar(), que ira te retornar uma lista. Como voce ja sabe, cada item dessa lista contem um objeto do tipo que voce criou ( Cliente, Usuario, sei la ). Para pegar todos os dados eh soh passar registro por registro:

Iterator iter = lista.iterator();
while (iter.hasNext()) {
    Usuario user = (Usuario)iter.next();

    String nome = user.getNome();
    int idade = user.getIdade();
}

sacou? Se quiser usar em outra classe, eh soh passar “lista” para essa outra classe ( ou chamar “listar()” dentro dela… como achar melhor )

Rafael

I

“Rafael Steil”:
A maneira que voce colocou o codigo esta certa… voce popula a entidade e entao adiciona ela na lista.

Para ver como usar em outra classe, eh soh ver os primeiros exemplos que eu postei no inicio do topico. Ou seja: voce chama esse listar(), que ira te retornar uma lista. Como voce ja sabe, cada item dessa lista contem um objeto do tipo que voce criou ( Cliente, Usuario, sei la ). Para pegar todos os dados eh soh passar registro por registro:

Iterator iter = lista.iterator();
while (iter.hasNext()) {
    Usuario user = (Usuario)iter.next();

    String nome = user.getNome();
    int idade = user.getIdade();
}

sacou? Se quiser usar em outra classe, eh soh passar “lista” para essa outra classe ( ou chamar “listar()” dentro dela… como achar melhor )

Rafael

Saquei agora… eu estava em dúvida se a lista já vinha com os valores… mas dai eu ví que você chamou os métodos get no while… essa era minha dúvida…

Valeu Rafael… obrigado mesmo… era isso que eu precisava…

Criado 30 de dezembro de 2003
Ultima resposta 30 de dez. de 2003
Respostas 14
Participantes 3