[Resolvido] List Multidimensional

4 respostas
andreacerqueira

Como guardo uma consulta do mysql que me retorna 3 colunas em uma List?
Tipo, estou fazendo isso:

List<String> listaUser = new ArrayList();
        String sql = null;
        sql = "SELECT id, usuario, nome FROM usuarios WHERE id = '" + idUser + "'";
        Connection conn = Conexao.obterConexao();
       
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery(sql);
        if (rs.next()) {
            listaUser.add(rs.getString("id"));
            listaUser.add(rs.getString("usuario"));
            listaUser.add(rs.getString("nome"));
        }

Só que dessa forma, cada coluna vai pra uma linha, e eu queria multidimensional, ou seja cada linha da List com as e colunas.
Eu tenho que ussar ArrayLits em vez de List?

4 Respostas

ViniGodoy

Crie uma classe:

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

    public Usuario(int id, String usuario, String nome) {
       this.id = id;
       this.usuario = usuario;
       this.nome = nome;
    }

    public int getId() {
        return id;
    }

    public void getUsuario() { 
        return usuario; 
    }

    public void setNome(String nome) { 
        return this.nome = nome;
    }

    public void getNome() { 
        return nome; 
    }
}
E então, crie seu List de usuários:
List&lt;Usuario&gt; listaUser = new ArrayList<Usuario>();        
        Connection conn = Conexao.obterConexao();
        PreparedStatement st = conn.prepareStatement("SELECT id, usuario, nome FROM usuarios WHERE id = ?");
        st.setInt(1, idUser);
        ResultSet rs = st.executeQuery();
        if (rs.next()) {
            Usuario usuario = new Usuario(rs.getInt("id"), rs.getString("usuario"), rs.getString("nome"));
            listaUser.add(usuario);
        }
andreacerqueira

Então Vini, minha class Usuarios tem a estrutura diferente do que vc me passou.

Mais ou menos assim:

public class Usuarios {
    public ResultSet listaUsuarios() {
       ResultSet rs = null;
        String sql = null;
        sql = "SELECT id, usuario, nome FROM usuarios";
        Connection conn = Conexao.obterConexao();
        try {
            Statement st = conn.createStatement();
            rs = st.executeQuery(sql);
        } catch(SQLException e) {
            System.out.println("Erro no SELECT: " + e.getMessage());
        }
        return rs;
    }
}

Daí pra mostrar a consulta no mu jps eu faço isso:

<%
Usuarios c = new Usuarios();
ResultSet rs = c.listaUsuarios();

/*rs.last();
int rowCount = rs.getRow();
out.println(rowCount);*/

while (rs.next()) {
    out.println(rs.getString("usuario") + " - " + rs.getString("nome") + "<br>");
}

%>

Agora tá mostrando separadamente como eu precisava, sei que no fim das contas não tem nada a ver com o que eu perguntei, mas é que inicialmente eu achei que precisava guardar os valores da consulta feita no servlet em uma array pra depois mostrar essa array na minha jsp.
Da forma que eu fiz agora não guardo a array, só o ResultSet e monto ele no meu jsp.
Tá certo dessa forma tb Vini? Estou acotumada com php e lá eu faço dessa forma.

ViniGodoy

Do jeito que você faz funciona, porém, num sistema grande, essa forma irá criar muito acoplamento, e deixar o sistema difícil de manter.

Normalmente, nós criamos classes para separar as camadas da aplicação.

O primeiro passo é criar classes de negócio, como Usuario, que representem as entidades do seu problema.
Depois, criamos classes que carregam classes de negócio do banco (os tais DAO).
E são essas classes que enviamos para a view (JSP/Html + JavaScript).

Existem alguns padrões arquiteturais que descrevem também como a view deve receber dados do model. Um dos padrões é o famoso MVC (Model-View-Controller) que diz que, a forma correta de fazer isso é através de classes de controle.
Mas, normalmente, no JSP não ficam detalhes como carga de banco, resultsets ou conexões.

andreacerqueira

Saquei, eu estou estudando e ainda não entrei na parte de mvc na facul, devo entrar semana que vem então vou esperar os detalhamentos na aula.
Meu medo era de estar fazendo isso mesmo que vc falou, colocando as coisas no lugar errado.
Vlw pelas dicas.

Criado 1 de abril de 2012
Ultima resposta 1 de abr. de 2012
Respostas 4
Participantes 2