Ir ao conteúdo
  • Cadastre-se
Young Gil

Como salvar itens de uma venda

Recommended Posts

boa tarde, peço ajuda estou a desenvolver um sistema de venda...agora ja configurando o formulario de venda. como posso salvar itens de uma venda no banco de dados.

tem que ser assim no final: 

T_Venda

CODIGO DA VENDA    CLIENTE   DATA DA VENDA

                 1                       1             07/09/2016

 

T_ITEM_Venda

CODIGO DA VENDA       CODIGO DO PRODUTO VENDIDO      QUANTIDADE       VALOR UNITÁRIO

                1                      10                                                          1                              R$ 5,00

                1                       50                                                         2                              R$ 3,30

                1                       48                                                         3                              R$ 2.25

                1                      15                                                          1                              R$ 1,99

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok ... vamos a analise: 
você fez direitinho, mas não esqueça que cada item de venda tem um id_item_venda

Agora sobre como salvar depende de como você configurou seu sistema. Se usou um ORM (Hibernate ou outro do tipo), basta ter o modelo bem configurado que ele faz todo o processo em cascata (Todos os objetos internos do objeto principal serão persistidos). Caso contrário, você terá que fazer isso passo a passo na mão.

1) Montar Objeto da Venda.
2) Salvar a Venda
3) Recuperar o id da Venda
4) Montar Itens de Venda
5) Adicionar Id da Venda nos Itens de Venda
6) Salvar um a um os Itens de Venda

Esse processo inteiro pode ser feito dentro do DAO da Venda por exemplo, recebendo o Objeto de Venda e a Lista de Itens de Venda ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tiver usando JDBC você desabilita o autocommit dentro do bloco try/catch depois que conectar e no catch você coloca

con.rollback(); no caso de uma exceção desfazer alteração na tabela.

 

try	{	
     // Faz a conexao com o banco
	 conectar("banco");	
	 con.setAutoCommit(false);		
	 String sql = "INSERT INTO PEDIDO";    	 
	 sql.execute();	   
     // Recupera o codigo do pedido salvo     
	 pedido.recuperaPedido();
	 
	 String sqlItem = "INSERT INTO ITEM";
	 Iterator interador = pedido.getItens().iterator();
	 for (;interador.hasNext();) 
	 {
		 //Executa o insert do intem
		 sqlItem.execute();
	 }
	 
	 con.commit();
	}catch (Exception e) {
		con.rollback();	
	}

Espero que ajude

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse caso você teria que:

- (Usando JPA) dar o flush após o commit no entity manager para atualizar a entidade, aí basta retornar o objeto que já vai estar com o Id correto.

- (Usando JDBC) realizar o Select do item manualmente pelo Statement para recuperar a Entidade salva. Nesse segundo caso, não tem um jeito mais fácil, infelizmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites
21 horas atrás, psykotico disse:

Nesse caso você teria que:

- (Usando JPA) dar o flush após o commit no entity manager para atualizar a entidade, aí basta retornar o objeto que já vai estar com o Id correto.

- (Usando JDBC) realizar o Select do item manualmente pelo Statement para recuperar a Entidade salva. Nesse segundo caso, não tem um jeito mais fácil, infelizmente.

se percebi..mais o que realmente necessito e' a funcao que irei usar para pegar o id da venda efectuado. estou usando JDBC

adicionado 7 minutos depois
 public Cliente InserirVenda(Venda v) {
        try {
            conexao = new ConectarBD().buscarConexao();
            statement = conexao.prepareStatement("INSERT INTO venda ( dataVenda, valor_Venda, codigo_cliente)  VALUES(?,?,?)", PreparedStatement.RETURN_GENERATED_KEYS);
            statement.setObject(1, v.getData());
            statement.setObject(2, v.getValor());
            statement.setObject(3, v.getCliente().getcodcliente());
            rs = statement.executeQuery();
            rs = statement.getGeneratedKeys();
            int id = 0;
            if (rs.next()) {
                id = rs.getInt(1);
                JOptionPane.showMessageDialog(null, id);
            }
            JOptionPane.showMessageDialog(null, "Registo salvo com sucesso", "Mensagem de confirmação", JOptionPane.INFORMATION_MESSAGE);
            JOptionPane.showMessageDialog(null, id);
        } catch (SQLException ex) {
            Logger.getLogger(ClienteDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

Fiz isso para ver se podia pegar o Id gerado..maj na mesma ele retorna o id = 0.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta: O Banco de Dados que você está usando aceita e está configurado corretamente para incrementar o id, correto?

se for o caso, tente com esse código. Aqui pelo menos funcionou assim ...

            conexao = new ConectarBD().buscarConexao();
            String generatedColumns[] = {"id"};
            statement = conexao.prepareStatement("INSERT INTO venda ( dataVenda, valor_Venda, codigo_cliente)  VALUES(?,?,?)", generatedColumns);

eu coloquei o nome do campo como "id", mas você altera para utilizar o nome correto da coluna que você está utilizando aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×