getGeneratedKeys

4 respostas
filipi

Boa noite,estou utilizando MySql e java para desktop em uma aplicação:

Possuo duas tabelas relacionadas (vendas,item_venda) a tabela item_venda possui a FK id_venda,portanto preciso salvar a id_venda. Pois bem,consigo recuperar a mesma na hora de fazer o INSERT,como mostra meu metodo abaixo

public void adiciona(Venda venda) throws SQLException{

         String adiciona = "insert into venda(data,id_cli)"
                + "values(?,?)";
         PreparedStatement ps = getConnection().prepareStatement(adiciona);
      
         ps.setDate(1, venda.getData());
         ps.setInt(2,venda.getCliente().getId());
         ps.execute();
       
         ResultSet rs = ps.getGeneratedKeys();  
          venda.setId((rs.next())?rs.getInt(1):0);
         
     }

Debugando vi que a id recebe o valor correto!

Agora na classe do dao do item venda,fiz o metodo dessa forma

public void adiciona(ItemVenda item) throws SQLException{
              Venda venda = new Venda(); 
        String insert = "insert into item_venda (quantidade,total_venda,id_produto,id_venda)"
                + "values (?,?,?,?)";
        
        adiciona(insert,item.getQuantidade(),item.getTotalVenda(),item.getId_produto().getId(),
            venda.getId());
      
    }

e chamei ele assim

public void adiciona(int quantidade,Estoque id_produto,int id_venda,double totalVenda) throws SQLException{
        Venda venda = new Venda();
        ItemVenda item = new ItemVenda();
  
        item.setQuantidade(quantidade);
        item.setId_produto(id_produto);
        venda.setId(id_venda);
        item.setTotalVenda(totalVenda);        
        
        new ItemVendaDao().adiciona(item);
    }

O meu problema é que na hora de chamar o metodo controller para salvar os itens da venda

control.adiciona(qnt,est,venda.getId(),valor);

me retorna o seguinte erro

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

que aponta para essa linha

adiciona(insert,item.getQuantidade(),item.getTotalVenda(),item.getId_produto().getId(),
            venda.getId());

Não consigo ver aonde estou errando,gostaria de contar com a ajuda de vocês!

Desde já agradeço

4 Respostas

drsmachado

Quatro possibilidades:

  • Objecto control nulo
  • Objecto item nulo
  • Objeto id_produto (???) nulo
  • Objeto venda nulo
filipi

drsmachado:
Quatro possibilidades:

  • Objecto control nulo
  • Objecto item nulo
  • Objeto id_produto (???) nulo
  • Objeto venda nulo

Sim, debuguei novamente e verifiquei que a id_venda no item_venda está vindo nula e quando set esse id ele está com valor 0,não estou conseguindo atribuir o valor dessa id de venda que resgato no primeiro metodo de inserir os dados…

Como poderia fazer isso?

Obrigado

drsmachado

Fazendo um select e obtendo o id desejado.

filipi

Mas faria sentido eu dar um select,sendo que eu estou chamando os dois métodos de adicionar dentro do mesmo botão? Ou seja eu fiz o primeiro insert e setei no id de venda e assim que chamar o segundo método para adicionar os itens da venda utilizar esse id recuperado da venda…

Criado 20 de agosto de 2013
Ultima resposta 22 de ago. de 2013
Respostas 4
Participantes 2