Arraylist

3 respostas Resolvido
javaarraylist
WallysonDesv

Oi sou novo na programação e estou tendo um problema ao tentar armazenar dados dentro de uma array list, toda vez que adiciona um elemento na lista ele muda o primeiro que foi adicionado pelo segundo, ficando todos no array list com os mesmos dados.

segue o código:

public ArrayList<FuncionarioDTO> listarTodasFuncoes() throws PersistenciaException {
	ArrayList<FuncionarioDTO> listarFuncoesTB = new ArrayList<FuncionarioDTO>();
	
	try {			
		Connection connection = ConexaoUtil.getInstance().getConnection();
		
		String sql = "SELECT ID_FUNCAO, FUNCOES FROM tb_funcao";
		
		PreparedStatement stantement = connection.prepareStatement(sql);
					
		//código a seguir faz uma copia da tabela do banco de dados em uma Query
		ResultSet resultSet = stantement.executeQuery();
		FuncionarioDTO dto = new FuncionarioDTO();
		while (resultSet.next()) {
			
			dto.setId(resultSet.getInt("ID_FUNCAO"));
			dto.setFuncao(resultSet.getString("FUNCOES"));
			
			listarFuncoesTB.add(dto);
			
		}
		
	} catch (Exception e) {
		e.printStackTrace();
		throw new PersistenciaException(e.getMessage(), e);
	}
	return listarFuncoesTB;
}

Se alguém poder me ajudar agradeço.

3 Respostas

A
Solucao aceita

O problema é que você está adicionando o mesmo dto todas as vezes. Você altera ele com novos dados e adiciona na lista.
Só trocar a linha com o new FuncionarioDTO() com a do while que vai dar certo, pois assim você cria um objeto novo a cada vez que o while roda.

RaulCrash

A referência da instância FuncionarioDTO sempre é a mesma dentro do while. Por isto está ficando tudo duplicado pois você tem uma list de uma unica referencia de FuncionarioDTO. Instância sempre que precisar que o objeto tenha outros valores ao seus atributos.

while (resultSet.next()) {
                    FuncionarioDTO dto = new FuncionarioDTO();
			dto.setId(resultSet.getInt("ID_FUNCAO"));
			dto.setFuncao(resultSet.getString("FUNCOES"));

			listarFuncoesTB.add(dto);

		}

EDIT: Enviei antes de ver que o colega acima já tinha postado.

WallysonDesv

AbelBueno e RaulCrash muito obrigado deu tudo certo!

Criado 16 de janeiro de 2017
Ultima resposta 16 de jan. de 2017
Respostas 3
Participantes 3