Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Adicionando na ArrayList com laço de repetição

Olá pessoal!

Ficou muito bom a primeira aula deste curso. No entanto, não encontrei orientação para adicionarmos elementos em nossa ArrayList em um laço de repetição.

Exemplo: Após um SELECT no banco de dados, foram retornados 10 linhas cujos campos são: ID, Nome, Idade.

O campo ID está representado da seguinte forma:

final Connection conn = DriverManager.getConnection();
PreparedStatement stm = null;
                  ResultSet rs = null;     

String id = rs.getString("ID");

//Criando ArrayList
List<String> ids = new ArrayList<>();
while(rs.next()) {
            ids.add(id);
}
return ids;

Alguém poderia dar um exemplo de como adicionarmos a informação do campo ID vindo do ResultSet para dentro da ArrayList que criamos como ids?

Eu posso fazer assim como no exemplo acima ou devo, dentro do laço while, criar um objeto da classe que representa a tabela no campo de dados e usar o MinhaTabela.setID(rs.getString("ID")?

while(rs.next()) {
            MinhaTabela tabelinha = new MinhaTabela();
            MinhaTabela.setID(rs.getString("ID");
            ids.add(tabelinha);
}
return ids;

Obrigado

3 respostas

Oi John,

O mais comum é a segunda opção mesmo, pois assim o ArrayList terá o objeto completo, e não apenas os ids dos registros.

Um exemplo:

public class Cliente {

    private Long id;
    private String nome;
    private String email

    //gets e sets
}
Connection conn = DriverManager.getConnection(//dados da conexao);
String sql = "select * from clientes";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();

List<Cliente> clientes = new ArrayList<Cliente>();
while(rs.next()) {
    Cliente c = new Cliente();
    c.setId(rs.getLong("id"));
    c.setNome(rs.getString("nome"));
    c.setEmail(rs.getString("email"));

    clientes.add(c);
}

Bom dia Rodrigo!

Neste caso que vc indicou, com List<Cliente> clientes = new ArrayList<Cliente>(); isso tem algo a ver com hibernate ou é uma forma diferente de se fazer acesso ao banco?

Pois, eu entendo que ambos são sql puro..

Se puder me esclarecer como que fazemos para identificar quando o SELECT,DELETE,UPDATE etc está sendo feito com Hibernate ou não.

Seria algo do tipo: ver na classe que representa a tabela se tem os annotations, pois se estiver algo como no exemplo abaixo, é porque usa hibernate?

@Audit(dataChange = false, dataLoad = false)
@Entity
@Table(name = "TABELINHA")
public class Tabelinha  {

O que de fato difere/identifica que está sendo feito acesso ao banco com sql puro ou hibernate, independente se tem um DAO ou se é feito acesso direto no metodo de alguma classe que representa as funcionalidades do sistema..

E se a Tabelinha tiver relacionamento com uma outra tabela chamada TabelinhaCompras,, muda alguma coisa no ArrayList?

SELECT TAB.DADOS,
       TAB.NOME,
       TABCOMP.DATAAQUISICAO, 
       TABCOMP.VALOR 
        FROM TABELINHA TAB,
        TABELINHACOMPRAS TABCOMP
         WHERE 
              TABCOMP.ID = TAB.ID;

Eu estou fazendo o curso de Hibernate mas estou bem no começo. Caso eles expliquem por lá, desconsidere essa pergunta lol Obrigado

solução!

Oi John,

Na verdade o exemplo que mostrei não é utilizando Hibernate, mas sim utilizando o JDBC.

Se fosse hibernate seria mais fácil ainda o código, pois ele simplifica muita coisa que precisamos fazer manualmente com JDBC.

Dá para saber que é JDBC por conta da utilização das classes Connection, PreparedStatement e ResultSet.

Com o Hibernate são outras classes totalmente diferentes.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software