Olá pessoal tudo bem? Eu estou com o seguinte problema: eu quero fazer um relatório de produtos vendidos, mas quando vai printar na tela, o loop sobrescreve(ex: o primeiro componente do array é substituído pelo próximo, e assim por diante). Eu sou iniciante em JAVA e se alguém puder me ajudar a evitar essa sobrescrição, eu agradeço.
Segue o main:
package sistema.telas;
import static sistema.es.EntradaESaida.*;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import sistema.sgbd.BancoDeDados;
import sistema.entidade.RelatorioVenda;
public class RelatorioVendas {
//chama sua classe para fazer conexao com o banco
static Connection con = new BancoDeDados().getConnection();
public static void relatorio() throws IOException{
List<RelatorioVenda> relatorio = getLista();
String colunas[] = {"Nome", "Preço", "Quantidade", "Preço Total"};
String linhas[][] = new String[relatorio.size()][4];
for (int linha = 0; linha < linhas.length; linha++){
for (RelatorioVenda relatorioVenda : relatorio) {
linhas[linha][0] = relatorioVenda.getNomeProduto();
linhas[linha][1] ="R$" + relatorioVenda.getPreco();
linhas[linha][2] = relatorioVenda.getQuantidade()+ "un";
linhas[linha][3] ="R$" + relatorioVenda.getPrecoTotal();
}
}
exibirTabela("Relatorio de Vendas", linhas, colunas, 150, 750);
public static List<RelatorioVenda> getLista() {
try {
List<RelatorioVenda> relatorioVendas = new ArrayList<RelatorioVenda>();
PreparedStatement stmt = con.prepareStatement("SELECT produto.nome, produto.preco, venda.quantidade_vendida, (venda.quantidade_vendida*produto.preco) as multiplicacao FROM produto, venda WHERE produto.codigo = venda.codigo_produto;");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
// criando o objeto venda
RelatorioVenda venda = new RelatorioVenda();
venda.setNomeProduto(rs.getString("nome"));
venda.setPreco(rs.getFloat("preco"));
venda.setQuantidade(rs.getInt("quantidade_vendida"));
venda.setPrecoTotal(rs.getFloat("multiplicacao"));
// adicionando o objeto à lista
relatorioVendas.add(venda);
}
rs.close();
stmt.close();
return relatorioVendas;
} catch (SQLException e) {
msgErro("Erro ao carregar as tabelas venda e produto. ", "Relatorio de Vendas");
throw new RuntimeException(e);
}
}}
Segue o construtor:
package sistema.entidade;
/**
* Classe usada para representar um Relátorio de Venda.
* @author Matheus William
*/
public class RelatorioVenda {
private String nomeProduto;
private float preco;
private int quantidade;
private float precoTotal;
public RelatorioVenda() {
}
public RelatorioVenda(String nomeProduto, float preco, int quantidade,
float precoTotal) {
this();
this.nomeProduto = nomeProduto;
this.preco = preco;
this.quantidade = quantidade;
this.precoTotal = precoTotal;
}
public String getNomeProduto() {
return nomeProduto;
}
public void setNomeProduto(String nomeProduto) {
this.nomeProduto = nomeProduto;
}
public float getPreco() {
return preco;
}
public void setPreco(float preco) {
this.preco = preco;
}
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
public float getPrecoTotal() {
return precoTotal;
}
public void setPrecoTotal(float precoTotal) {
this.precoTotal = precoTotal;
}
@Override
public String toString() {
return String.format("%s - %.2f - %d - %.2f", nomeProduto,preco,quantidade,precoTotal);
}
}