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

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:

[code]
public static void iniciaVenda() {
bemaECF.abreCupom(); // Abrir Cupom - Bematech

	cVendaBean = controle.iniciaVenda();
	jLabel7.setText(String.valueOf(cVendaBean.getCodigo()));	
	
	arrayDVendaBean = new ArrayList<DetalheVendaBean>();
}[/code]

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:

[code]
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));
	}
}

}[/code]

[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!

[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!

Ninguém ? :cry:

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.

[quote=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.[/quote]

Olá NEL,
Poderia me ajudar, no DetalheVendaDAO, Seria assim:

[code]
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"));  
} [/code]

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

Obrigado!

Help-me ! :frowning: :frowning:

[code]
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 seiLa = new ArrayList();
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"));  
} [/code]

[/quote]

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.

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:

[quote=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: [/quote]

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?

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:

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?!

[quote=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?![/quote]

Ainda não consegui!
Vou Testar Agora.

Consegui entender o que estou tentando fazer?

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…

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.

[quote=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…[/quote]

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: