Boa tarde, estou com um problema na saida dos meus dados de um arrayList, estão saindo duplicados.
Usei o println apenas para ter a saida, mais pra frente farei outras coisas com isso, porem preciso apenas das saidas exatas disso.
Segue o codigo
da classe para listar.
public ArrayList<TipoPizzas> arrayTipoPizza = new ArrayList<TipoPizzas>();;
public void listar() {
ResultSet rs = null;
Connection cnn;
try {
cnn = new ConnectionFactory().getConnection();
PreparedStatement sql = cnn.prepareStatement("select * from pizzas");
rs = sql.executeQuery();
while (rs.next()) {
TipoPizzas tipo = new TipoPizzas();
tipo.setSabor(rs.getString("nome"));
tipo.setPreco(rs.getString("valor"));
tipo.setImagem(rs.getString("imagem"));
arrayTipoPizza.add(tipo);
}
for(TipoPizzas TP : arrayTipoPizza){
System.out.println("Sabor: " + TP.getSabor());
System.out.println("Valor: " + TP.getPreco());
}
classe TiposPizzas
public class TipoPizzas implements Comparable<TipoPizzas>{
private String sabor;
private String preco;
private String ingrediente;
private String quantidade;
private String imagem;
@Override
public int compareTo(TipoPizzas o) {
return sabor.compareTo(o.getSabor());
}
getters and setters...
Classe main q vai chamar o metodo de listar
public static void main(String[] args) throws IOException {
VendaPizzas VP = new VendaPizzas();
VP.setVisible(true);
VP.listar();
}
}
Fazendo assim, a saida esta sendo duplicada, tanto se eu fizer aleatório, quanto se eu usar o sort do Collections.
O seu método listar não deveria retornar a lista ?
No caso pelo que eu entendi ele esta populando um atributo, essa lista ta vazia?
Não seria melhor voltar essa lista, como o @ramilani12 falou?
ramilani1234m
O seu método listar não deveria retornar a lista ?
mas ai de qualquer jeito no retorno eu pegaria e faria o laço for igual esta no metodo Listar.
Creio que não faria diferença.
opa_roa9m
No caso pelo que eu entendi ele esta populando um atributo, essa lista ta vazia?
Não seria melhor voltar essa lista, como o @ramilani12 falou?
A lista esta populada pelo banco de dados por essa função
arrayTipoPizza.add(tipo);
Ele add no Array o TipoPizzas, um por um. O banco tem 100 linhas. Só que esta retornando 200 linhas.
while (rs.next()) {
TipoPizzas tipo = new TipoPizzas();
tipo.setSabor(rs.getString(“nome”));
tipo.setPreco(rs.getString(“valor”));
tipo.setImagem(rs.getString(“imagem”));
arrayTipoPizza.add(tipo);
}
no banco existem 100 registros, pela logica, ele deveria fazer essa contagem 100 vezes. Porem coloquei um contador pra ver, e ele esta fazendo 200 vezes. Então o erro esta ai =/
Poderia colocar uma instrução que contasse quantos registros tem e fizesse pra parar quando chegasse no numero total. Porem todos os lugares que vi fazendo esse metodo, é desse jeito q esta, então queria saber o motivo desse em si não dar certo.
ESQUECE TUDO…
Sou muito burro. estou chamando o metodo duas vezes… por essa razão esta duplicando.
Me desculpem.
Se vc retornasse a lista no seu método listar, perceberia que a referência das listas seriam diferentes
Eu mudei.
public ArrayList<TipoPizzas> listar() {
ResultSet rs = null;
Connection cnn;
try {
cnn = new ConnectionFactory().getConnection();
PreparedStatement sql = cnn.prepareStatement("select * from pizzas");
rs = sql.executeQuery();
while (rs.next()) {
TipoPizzas tipo = new TipoPizzas();
tipo.setSabor(rs.getString("nome"));
tipo.setPreco(rs.getString("valor"));
tipo.setImagem(rs.getString("imagem"));
arrayTipoPizza.add(tipo);
}
return arrayTipoPizza;
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception ex) {
Logger.getLogger(VendaPizzas.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}