(Solucionado) Erro ao dar baixa no estoque após a conclusão de uma venda, como resolver ?

5 respostas
O

Olá pessoal sou iniciante em java, e estou fazendo um programa de venda mas estou com um probleminha quando vou registrar a venda no banco de dados preciso dar baixa no estoque também, no entanto o código de atualização dá erro, outro coisa também é que coloquei uma condição pra informar uma quantidade baixa no estoque porém da erro também, alguém pode me ajudar ?, por gentileza.

try {

VendaDao vd = new  VendaDao();

Venda v1 = new  Venda();

Produto p2  = new Produto();

ProdutoDao pd = new ProdutoDao();
String n = jTextnome.getText();
        String v = jTextvalor.getText();
        int q = Integer.valueOf(jTextvquant.getText());
        String d = jTextdata.getText(); 
        
        int qtprodbanco = 1;                    
        int qtprodbanco2 = 5;   
        //AQUI DIGO AO USUÁRI SE TEM O PRODUTO NO ESTOQUE
        if(p2.getQuantProd()>= qtprodbanco ){
           JOptionPane.showMessageDialog(null, "produto em estoque"+"  "+p2.getQuantProd());
        //AQUI FAÇO O CADASTRO DA VENDA     
         v1.setDataVenda(d);
         v1.setNomeVenda(n);
         v1.setQuantVenda(q);
         v1.setValorVenda(v);               
         vd.cadastrar_venda(v1);    
         //SETANDO A VENDA EM UMA TABELA          
        String data = v1.getDataVenda();
        String nome = v1.getNomeVenda();
        String valor =  v1.getValorVenda();
        String quant =String.valueOf(v1.getQuantVenda());
                         
        DefaultTableModel inserir = (DefaultTableModel) Pedidos.getModel(); // insere linha na tabela
        inserir.addRow(new String[]{nome,valor, quant,data});
                   
       //CODIÇÃO FINAL  
       }
       else if (p2.getQuantProd()==qtprodbanco2 ){
       JOptionPane.showMessageDialog(null, "Atenção você tem a quantidade mínima deste produto abasteça seu estoque"+"   "+p2.getQuantProd());
        }
        else{
            JOptionPane.showMessageDialog(null, "não há produto em estoque"+"  "+p2.getQuantProd());
        }
        //AQUI SERIA PRA DAR BAIXA NO ESTOQUE QUANDO EU FIZESSE A VENDA
        //NO ENTANTO NÃO ESTÁ DANDO BAIXA 
        do{
         int quantidade = 0, resultado = 0;          
        
         quantidade = p2.getQuantProd();
         resultado = quantidade - v1.getQuantVenda();
         pd.atualizarQuantidade(p2);
        }while(p2.getQuantProd()== qtprodbanco);
             
        } catch (ClassNotFoundException | SQLException ex) {
        Logger.getLogger(teladeAtendimento.class.getName()).log(Level.SEVERE, null, ex);
        }

este outro código é o método pra atualizar

public void atualizarQuantidade(Produto p1) throws SQLException{

Produto p2 = new Produto();

//conexão com o banco de dados======

connection = DriverManager.getConnection(CAMINHO, USUARIO_BD, SENHA_BD);

System.out.println(Conectou ao banco!!!);

//==============================
//Preparar a Query===========
    String query = ATUALIZAR_QUANTIDADE_PELO_ID;
    stmt = connection.prepareStatement(query);
    stmt.setInt(1,p2.getQuantProd());  
    stmt.setString(2,p2.getNomeProd());
  
      
       stmt.executeUpdate();  
      
           
       stmt.close();
       connection.close();
       System.out.println("Fechou Conexão");  
        
        
        
        
}

5 Respostas

I

provavelmente é um dado sendo passado incorretamente para um campo, mas vc pode espalhar nesses codigos alguns try cacth apenas pra saber onde está errado, assim vc vai achar mais rapido.

O

Olá Igor mas a lógica está correta ?
então o erro é na condição pois não sei o porquê que ele não executa a não ser o ELSE que diz que não tem produto no estoque quantidade 0, e pra fazer a atualização aparece o seguinte erro

Conectou ao banco!!!

fev 10, 2017 11:39:24 PM main.teladeAtendimento ButtonInserir1ActionPerformed

GRAVE: null

java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)

at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3813)

at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3795)

at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3840)

at com.mysql.jdbc.PreparedStatement.setNull(PreparedStatement.java:3880)

at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4456)

at dao.ProdutoDao.atualizarQuantidade(ProdutoDao.java:135)

at main.teladeAtendimento.ButtonInserir1ActionPerformed(teladeAtendimento.java:530)

at main.teladeAtendimento.access$200(teladeAtendimento.java:37)

at main.teladeAtendimento$3.actionPerformed(teladeAtendimento.java:135)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:308)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6533)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6298)

at java.awt.Container.processEvent(Container.java:2236)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2294)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)

at java.awt.Container.dispatchEventImpl(Container.java:2280)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.awt.EventQueue$4.run(EventQueue.java:729)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
I

Manda a query que vc atualiza o estoque, agora está mais claro o erro.

O

consegui resolver, coloquei um gatilho no banco de dados e quando eu insiro uma venda ele atualiza a quantidade de produto vendida, no entanto eu não consegui entender o porquê da condição não funcionar o IF não funciona somente o ELSE

String n = jTextnome.getText();
        String v = jTextvalor.getText();
        int q = Integer.valueOf(jTextvquant.getText());
        String d = jTextdata.getText(); 
        
     if( p2.getQuantProd()> 0 &&  p2.getQuantProd() < 5){
JOptionPane.showMessageDialog(null,quantidade deste produto está miníma +p2.getQuantProd());

v1.setDataVenda(d);

v1.setNomeVenda(n);

v1.setQuantVenda(q);

v1.setValorVenda(v);
vd.cadastrar_venda(v1);
        
        String data = v1.getDataVenda();
        String nome = v1.getNomeVenda();
        String valor =  v1.getValorVenda();
        String quant = String.valueOf(v1.getQuantVenda());
                         
        DefaultTableModel inserir = (DefaultTableModel) Pedidos.getModel(); // insere linha na tabela
        inserir.addRow(new String[]{nome,valor, quant,data});
        ProdutoDao pd;
           }
           else{
               JOptionPane.showMessageDialog(null, "sem produto no estoque");
           }
      
    } catch (SQLException | ClassNotFoundException ex) {
        Logger.getLogger(teladeAtendimento.class.getName()).log(Level.SEVERE, null, ex);
    }
O

cara muito obrigado pela sua atenção, felizmente meu problema foi resolvido com muita luta consegui fazer a contagem dos produtos no estoque com um TRIGGER.
e colocar a condição pra não deixar vender produto que não esteja disponível no estoque
a condição fiz dessa maneira.

VendaDao vd = null;

try {

vd = new  VendaDao();

Venda v1 = new  Venda();

Produto p1  = new Produto();
ProdutoDao pd = null;
       try {
          pd = new ProdutoDao();
          
      String nom = jTextnome.getText();               
      p1= pd.consultarProdutoPeloNome(nom);         
    
     int qtd = Integer.valueOf(jTextvquant.getText());
    
    if( p1.getQuantProd() >= qtd || qtd <= p1.getQuantProd()){
      
              
        String n = jTextnome.getText();
        String v = jTextvalor.getText();
        int q = Integer.valueOf(jTextvquant.getText());
        String d = jTextdata.getText(); 
        
         v1.setDataVenda(d);
         v1.setNomeVenda(n);
         v1.setQuantVenda(q);
         v1.setValorVenda(v);   
         
         vd.cadastrar_venda(v1);
        
        String data = v1.getDataVenda();
        String nome = v1.getNomeVenda();
        String valor =  v1.getValorVenda();
        String quant = String.valueOf(v1.getQuantVenda());
                         
        DefaultTableModel inserir = (DefaultTableModel) Pedidos.getModel(); // insere linha na tabela
        inserir.addRow(new String[]{nome,valor, quant,data});
        
            }  
                          

            else{
               JOptionPane.showMessageDialog(null, " quantidade desse produto no estoque"+" "+p1.getQuantProd());
            }
              
         
       } catch (ClassNotFoundException ex) {
        Logger.getLogger(teladeAtendimento.class.getName()).log(Level.SEVERE, null, ex);
      } 
      } catch (SQLException | ClassNotFoundException ex) {
        Logger.getLogger(teladeAtendimento.class.getName()).log(Level.SEVERE, null, ex);
      }

RESOLVIDO

Criado 10 de fevereiro de 2017
Ultima resposta 20 de fev. de 2017
Respostas 5
Participantes 2