[AJUDA] - Pegar Dados de um ArrayList - [AJUDA]

14 respostas
viny_scholl

Olá Pessoal, tenho aqui minha Frente de Caixa com Cadastros de Produotos e Vendas!
Quando faço uma Venda os dados são armazenados em uma Tabela D_Venda, aonde o Codigo da venda é um ArrayList

Minha Classe DetalheVendaBean! [color=green]//Tabela que grava as Vendas:[/color]
public class DetalheVendaBean {

	String codigoProduto;
	Integer quantidade;
	Double valorUnitario;
	Double valorTotal;
	Integer codigoCabecalhoVenda;
	
	public Integer getCodigoCabecalhoVenda() {
		return codigoCabecalhoVenda;
	}
	public void setCodigoCabecalhoVenda(Integer codigoCabecalhoVenda) {
		this.codigoCabecalhoVenda = codigoCabecalhoVenda;
	}
	public String getCodigoProduto() {
		return codigoProduto;
	}
	public void setCodigoProduto(String codigoProduto) {
		this.codigoProduto = codigoProduto;
	}
	public Integer getQuantidade() {
		return quantidade;
	}
	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}
	public Double getValorUnitario() {
		return valorUnitario;
	}
	public void setValorUnitario(Double valorUnitario) {
		this.valorUnitario = valorUnitario;
	}
	public Double getValorTotal() {
		return valorTotal;
	}
	public void setValorTotal(Double valorTotal) {
		this.valorTotal = valorTotal;
	}
}
Definindo o Array:
private static ArrayList<DetalheVendaBean> arrayDVendaBean;
	private DetalheVendaBean dVendaBean;
Iniciando a Venda:
public static void iniciaVenda() {
		bemaECF.abreCupom(); // Abrir Cupom - Bematech

		cVendaBean = controle.iniciaVenda();
		jLabel7.setText(String.valueOf(cVendaBean.getCodigo()));	
		
		arrayDVendaBean = new ArrayList<DetalheVendaBean>();
	}
Aqui a class que faz a venda:
private void insereItemVendido() {
			
					int quantidade = Integer.parseInt(jTextField3.getText());
					double vlrProduto = Double.parseDouble(jTextField4.getText());
					double vlrVendaAtual = vlrProduto * quantidade;				
				//Modelo da List com os Produtos Adicionados no Cupom

							dVendaBean = new DetalheVendaBean();
							dVendaBean.setCodigoCabecalhoVenda(Integer.parseInt(jLabel7.getText())); //Codigo da venda
							dVendaBean.setCodigoProduto(tfCodigo.getText()); //Codigo do produto
							dVendaBean.setQuantidade(Integer.parseInt(jTextField3.getText())); //Quantidade Vendida
							dVendaBean.setValorUnitario(Double.parseDouble(jTextField4.getText())); //Valur unitário do prodduto
							dVendaBean.setValorTotal(vlrVendaAtual); // Valor Total da Venda
							arrayDVendaBean.add(dVendaBean); // Adiciona ao Array
		}
Minha Classe Controle:
public class Controle {	
      
         DetalheVendaDAO dVendaDAO = new DetalheVendaDAO(); // DetalheVendaDAO() -> Conexão com o BD da tabela Detalhe da Venda
	     CabecalhoVendaDAO cVendaDAO = new CabecalhoVendaDAO(); // CabecalhoVendaDAO()-> Bd de Cabeçalho da Venda
	
    public void fechaVenda( CabecalhoVendaBean cVendaBean, ArrayList<DetalheVendaBean> arrayDVendaBean) {
		cVendaDAO.alterarCVenda(cVendaBean); 
		for (int i = 0; i < arrayDVendaBean.size(); i++) {
			dVendaDAO.inserirDVenda(arrayDVendaBean.get(i));
		}
	}
}

[size=18]O que eu gostaria de Fazer é Percorrer o arrayDVendaBean e Setar Pelo "CodigoCabecalhoVenda" o Maior valor , pois seria o Código da Minha Ultima Venda!
E Pegar o Codigo dos Produtos que foram vendidos, pois com eles eu Atualizaria o meu Estoque quando a compra for Cancelada![/size]

Obs: Um CodigoCabecalhoVenda pode conter varios Produtos vendidos!
[img]http://img857.imageshack.us/img857/4204/dvenda.jpg[/img]
[size=18][color=red]Olhando esta imagem acima, e tendo ela como base, eu queria que o arrayDVendaBean me Retornasse todos os PRODUTO_CODIGO cujo o C_VENDA_CODIGO seja igual a 275 !
[/size][/color]
Alguém Saberia como fazer isso?

Abraço!

14 Respostas

viny_scholl

Ninguém ? :cry:

nel

Estamos falando de um simples select?
Use o PrepraredStatement e aplique a Query:

Select produto_codigo from d_venda where c_venda_codigo = ?"

No seu DAO (seria o DetalheVendaDAO, perfeito), faça algo como:

//considere rs = ResultSet
List<String> codigos = new ArrayList<String>();//Estou SUPONDO que produto_codigo seja String
while(rs.next() {
   codigos.add(rs.getString("produto_codigo"));
}

Mais simples ainda, seria criar o objeto que você precisa, setar diretamente nesse objeto o valor do código e retornar uma Lista desse objeto contendo todos os produtos, e assim você apenas usufrui das informações desejadas.

Abraços.

viny_scholl
nel:
Estamos falando de um simples select? Use o PrepraredStatement e aplique a Query:
Select produto_codigo from d_venda where c_venda_codigo = ?"
No seu DAO (seria o DetalheVendaDAO, perfeito), faça algo como:
//considere rs = ResultSet
List<String> codigos = new ArrayList<String>();//Estou SUPONDO que produto_codigo seja String
while(rs.next() {
   codigos.add(rs.getString("produto_codigo"));
}
Mais simples ainda, seria criar o objeto que você precisa, setar diretamente nesse objeto o valor do código e retornar uma Lista desse objeto contendo todos os produtos, e assim você apenas usufrui das informações desejadas. Abraços.
Olá NEL, Poderia me ajudar, no DetalheVendaDAO, Seria assim:
PreparedStatement pstm;
    ResultSet rs;
	   Statement stm;

    String codigoVenda = "SELECT PRODUTO_CODIGO FROM D_VENDA WHERE C_VENDA_CODIGO = ?" ;
	                                                           // Sim, o PRODUTO_CODIGO é String, no Banco esta declarado Varchar(13) !!
  public String retornaCodigoVenda() {
		try {
			stm = bd.conectar().createStatement();
			rs = stm.executeQuery( codigoVenda );
			rs.first();  
			return rs.getString(1);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			bd.desconectar();
		}
		return codigoVenda ;
	}
 
	List<String> codigos = new ArrayList<String>();
	while(rs.next()) {  
	   codigos.add(rs.getString("produto_codigo"));  
	}

[size=18]Aonde devo Colocar o List codigos = new ArrayList();... ???
[/size]
Não me dou bem com Array! :cry:

Obrigado!

viny_scholl

Help-me ! :frowning: :frowning:

RafaFloripa
PreparedStatement pstm;
    ResultSet rs;
	   Statement stm;

    String codigoVenda = "SELECT PRODUTO_CODIGO FROM D_VENDA WHERE C_VENDA_CODIGO = ?" ;
	                                                           // Sim, o PRODUTO_CODIGO é String, no Banco esta declarado Varchar(13) !!
  public List<String retornaCodigoVenda() {
		try {
			stm = bd.conectar().createStatement();
			rs = stm.executeQuery( codigoVenda );
			rs.first();  
                        List<String> seiLa = new ArrayList<String>();
                        while(rs.next()){
                            seiLa.add(rs.getString(1))
                        }
			return seiLa
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			bd.desconectar();
		}
		return codigoVenda ;
	}
 
	List<String> codigos = new ArrayList<String>();
	while(rs.next()) {  
	   codigos.add(rs.getString("produto_codigo"));  
	}

[/quote]

nel

Teste o que foi dito acima.
Apenas substitua o Statement por PreparedStatement :slight_smile:

Editando: agora que olhei com mais calma, poste a classe por completa, por favor.

viny_scholl

Modificando Ficaria Assim, Corrijam se estiver errado!:

public List<String> retornaCodigoVenda() { try { stm = bd.conectar().createStatement(); rs = pstm.executeQuery( codigoVenda ); rs.first(); List<String> codigos = new ArrayList<String>(); while(rs.next()){ codigos.add(rs.getString(1)); } return codigos; } catch (SQLException e) { e.printStackTrace(); } finally { bd.desconectar(); } return retornaCodigoVenda(); }

Como faço para “Imprimir” o resultado pra que eu veja se funcionou?

Obrigado pela Ajuda Pessoal!! :smiley: :smiley:

nel

viny_scholl:
Modificando Ficaria Assim, Corrijam se estiver errado!:

public List<String> retornaCodigoVenda() { try { stm = bd.conectar().createStatement(); rs = pstm.executeQuery( codigoVenda ); rs.first(); List<String> codigos = new ArrayList<String>(); while(rs.next()){ codigos.add(rs.getString(1)); } return codigos; } catch (SQLException e) { e.printStackTrace(); } finally { bd.desconectar(); } return retornaCodigoVenda(); }

Como faço para “Imprimir” o resultado pra que eu veja se funcionou?

Obrigado pela Ajuda Pessoal!! :smiley: :smiley:

return retornaCodigoVenda();

Você está usando recursividade para este caso?
Lhe pergunto, se for um erro que ocorre 1000x seguidas, como fica?
Seu programa ficará preso em um loop? O ideal para esse caso, no meu ponto de vista, é tratar a exceção.

Sobre o “Imprimir”, faça:

for(String cod : codigos) {
    System.out.println("Codigo: " + cod);
}

Chama-se for each, caso o desconheça.
Abraços.

P.s: ou a pergunta de imprimir refere-se a outro contexto do seu projeto?

viny_scholl

Obrigado Nel,
Quanto a Recursividade, não estou utilizando!

O For each esta se referenciaondo ao Laçõ: / size=9[/size] ??for(String cod : codigos) { System.out.println("Codigo: " + cod); }

O Imprimir, seria mostrar os dados que conteriam nesso ArrayList do retornaCodigoVenda !

Cara, se tu tiver interesse e até disponibilidade para me ajudar, eu poderia lhe envia meu fonte para que tu me ajudasse com esse problema!

[color=red]O que eu estou tentando Fazer é: [/color]Percorrer o Array do retornaCodigoVenda e Setar Pelo “CodigoCabecalhoVenda” o Maior valor , pois seria o Código da Minha Ultima Venda!
E Pegar o Codigo dos Produtos que foram vendidos e juntamente com eles a Quantidade Vendida, pois com eles eu [color=blue]Atualizaria o meu Estoque quando a compra for Cancelada[/color]! Para que não haja a Baixa no Estoque!

Ajuda Eu! : :cry:

:lol:

nel

Então, me manda mensagem.
O código fonte fica complicado, pois estou com pouco tempo.

Sim, o for each é laço sim.
Ali vai imprimir no seu console todos os códigos encontrados.

Conseguiu testar?!

viny_scholl

nel:
Então, me manda mensagem.
O código fonte fica complicado, pois estou com pouco tempo.

Sim, o for each é laço sim.
Ali vai imprimir no seu console todos os códigos encontrados.

Conseguiu testar?!

Ainda não consegui!
Vou Testar Agora.

Consegui entender o que estou tentando fazer?

Lucas_Abbatepaolo

cara…juro que não entendi seu problema ate agora…rs

vc quer pegar a sua ultima venda e os itens desta venda???

vc tem uma classe que pelo q eu entendi seria “cabecalhoVenda”???

se for o caso de que vc quer pegar no banco sua ultima venda…(acho q vc esta usando mysql)
faz a seguinte sentença

select * from “nome da tabela”
order by “id da tabela” desc
limit 0,1

assim vc vai retornar sua ultima venda…

ViniGodoy

Olá, evite escrever [AJUDA] no título do seu tópico. Além de ser completamente desnecessário, pois 99% dos tópicos são um pedido de ajuda, essa tag tira o destaque da tag [RESOLVIDO], que é realmente útil. Não tem porque tentar chamar mais atenção do que os outros, todos precisam de ajuda.

viny_scholl

Lucas Abbatepaolo:
cara…juro que não entendi seu problema ate agora…rs
vc quer pegar a sua ultima venda e os itens desta venda???
vc tem uma classe que pelo q eu entendi seria “cabecalhoVenda”???
se for o caso de que vc quer pegar no banco sua ultima venda…(acho q vc esta usando mysql)
faz a seguinte sentença
select * from “nome da tabela”
order by “id da tabela” desc
limit 0,1
assim vc vai retornar sua ultima venda…

Não é Isso Amigo, Vou tentar explicar Melhor,
Quando eu faço a Venda eu adiciono ela em um Array:

private static ArrayList<DetalheVendaBean> arrayDVendaBean;
	private DetalheVendaBean dVendaBean;

	private void insereItemVendido() {
		try {
			System.out.println("Entrou em TRY de insereItemVendido()");

					int quantidade = Integer.parseInt(jTextField3.getText()); 
					double vlrProduto = Double.parseDouble(jTextField4.getText());
					double vlrVendaAtual = vlrProduto * quantidade;
				
				//Modelo da List com os Produtos Adicionados no Cupom
							model.addElement(tfCodigo.getText() + "    " + jTextField2.getText() );
							model.addElement( " " + jTextField3.getText() + " X " +"R$ "+ jTextField4.getText() +  "       " + "R$ "+ (Double.parseDouble(jTextField3.getText())* Double.parseDouble(jTextField4.getText()) ) ); //Adiciona as desrições da venda no Model
						
							dVendaBean = new DetalheVendaBean();
							dVendaBean.setCodigoCabecalhoVenda(Integer.parseInt(jLabel7.getText())); //Codigo da Venda
							dVendaBean.setCodigoProduto(tfCodigo.getText());  //Codigo do produto
							dVendaBean.setQuantidade(Integer.parseInt(jTextField3.getText()));  //Quantidade Vendida
							dVendaBean.setValorUnitario(Double.parseDouble(jTextField4.getText())); //Valor Unitário do Produto
							dVendaBean.setValorTotal(vlrVendaAtual); //Valor de Venda Atual :: ( vlrProduto * quantidade)
							arrayDVendaBean.add(dVendaBean); //Adiciona ao Array
						
	                                                
							 tfCodigo.setText(""); 		//Limpo os Campos para a proxima Venda 
							 jTextField2.setText("");
								 		 
							 tfCodigo.requestFocus();   //Passo o Foco para inicia a venda inserindo o codigo do produto

        AtualizaEstoque(); // Atualiza Estoque dos Produtos vendidos!
							 
		}catch (Exception e){
			JOptionPane.showMessageDialog(null, "Entrou em Catch de insereItemVendido()");
			 tfCodigo.setText("");
			 jTextField2.setText("");
			tfCodigo.requestFocus();

		}		 
	}

Aonde Meu Atualiza Estoque para os Itens VENDIDOS é assim:

private void AtualizaEstoque() throws SQLException{
		/////////////////////////////////////////////////////////////////////
		System.out.println("Atualiza Estoque");
		int estoqueProduto = produtobean.getEstoque();
		int quantidadeRequerida = Integer.parseInt(jTextField3.getText());
		int atualizaEstoque= estoqueProduto - quantidadeRequerida;
	
		System.out.println("Atualizando o estoque!");
		System.out.println("Quandidade Requerida é = " + quantidadeRequerida);
		System.out.println("Estoque Atualizado seria =" + atualizaEstoque);
		
		controle.updateStock(tfCodigo.getText(), atualizaEstoque);  //Pegando o Codigo do produto e Atualizando por ele o novo Estoque, já com a Baixa referente ao que foi vendido! 
		System.out.println("Atualizou o estoque");
		/////////////////////////////////////////////////////////////////////
	}

O que eu Quero fazer é um CancelaAtualizaçãoEstoque().!
No Caso do Usuário Efetivar a Venda e por final querer Cancelar ela ele Deve voltar ao estoque antigo dos produtos!!
Porem Tenho que Atualizar o Estoque de mais de um produto, Buscando eles Pelo Codigo da Venda !

O meu problema é que eu quero atualizar o arrayDVendaBean quando Cancelar a Venda,
Se Fosse Somente um produto que deveria Atualizar quando minha compra fosse cancelada Seria Assim:

private void CancelaAtualizaçãoEstoque() throws SQLException {
		int estoqueAntigo = estoqueProduto; // Estoque do produto Antes de ter feito a Venda
    	int ultimoCodigoVenda = controle.retornaUltimoCodigo(); // Codigo da ULTIMA Venda - Essa que eu quero Atualizar
    	int estoqueAtualizadoCancelamento = estoqueAntigo += dVendaBean.getQuantidade(); // Voltando o Estoque Caso a Venda for Cancelada - (estoqueAntigo += dVendaBean.getQuantidade()) // dVendaBean.getQuantidade() // Quantidade Vendida que tenho que repor!
     JOptionPane.showMessageDialog(null, "O Ultimo Codigo de Venda é: "+ ultimoCodigoVenda);   // Mostrando qual o Codigo da minha ultima Venda	

     	if (ultimoCodigoVenda == dVendaBean.getCodigoCabecalhoVenda()){ // Comparando se o Codigo da Venda é igual ao Ultimo Codigo de Venda, Que é a que eu quero atualizar
     		dVendaBean.getCodigoProduto(); // Pega o Codigo do produto
     		dVendaBean.getQuantidade(); // Pega A Quantidade
     		controle.updateStock(dVendaBean.getCodigoProduto(), estoqueAtualizadoCancelamento); // Adiciona ao Update o Codigo da Venda e a Quantidade Atualizada do estoque, que é o antigo estoque, sem a Baixa do produto que foi Cancelado!
     	}
     	
	}

Eu Quero Atualizar MAIS de um produto, o Meu CancelaAtualizaçãoEstoque() é Chamado na Classe que Cancela minha Venda!

.
No Basico do Entendimento, eu Só quero CAncela a BAixa do Estoque que havia sido feita, quando eu Cancelar minha Venda!!

Help-me!

Sorry ViniGodoy!

Eu Posso Passar a Fonte do Sistema, para que assim me ajudem a Fazer o Cancelamento do estoque quando a compra for cancelada! :smiley:

Criado 30 de março de 2011
Ultima resposta 2 de abr. de 2011
Respostas 14
Participantes 5