Ajuda com consulta

3 respostas
fabiodurgante
seguinte tenho minha consulta

    public List<Itens_Venda> listar_Itens_Venda(Integer id_venda) {

      String sql = "SELECT * FROM itens_venda itv INNER JOIN produto p ON itv.id_produto = p.id_produto and itv.id_venda= ? ";         

        try {
            
             PreparedStatement stmt = getConexao().prepareStatement(sql);
           stmt.setInt(1, id_venda );

         ResultSet rs = stmt.executeQuery(); 
       rs.next();

     return  getItens_Venda(rs);
 
        } catch (SQLException sQLException) {
            System.out.println("Erro ao listar Itens Venda" + sQLException);
        }
        return null;
    } 


    private List<Itens_Venda> getItens_Venda(ResultSet rs) throws SQLException {
        if(rs == null)
            return null;
        
        List<Itens_Venda> lista = new ArrayList<Itens_Venda>();
        while(rs.next()) {
            Itens_Venda iven = new Itens_Venda();
            
            iven.setid_venda(rs.getInt("id_venda"));
         iven.setid_produto(rs.getInt("id_produto"));
       //    iven.setid_produto(rs.getInt("id_cliente"));
         iven.setquant_vendida(rs.getInt("quant_vendida"));
         iven.setvalor_pagar(rs.getDouble("valor_pagar"));
     
            lista.add(iven);
        }
        return lista;
    }

depois pego o resultado e coloco numa lista

por fim coloco em um JTABLE

 private void preenche_Tabela_Itens_Venda() {
          DefaultTableModel modelo = new javax.swing.table.DefaultTableModel(
            new Object [][] {},
            new String [] {"Cod venda", "Cod Produto" , "Nome Produto", "Quant Vendida", "Valor A Pagar"}
        );
   Itens_VendaDao ITVendaD = new Itens_VendaDao() ;
    tabela.setModel(modelo);
   
ProdutoDao pro = new ProdutoDao();
   List<Itens_Venda> lista = ITVendaD.listar_Itens_Venda(ven.getid_venda() );  //aqui eu pego o ID da venda e passo pra funcao 
   
    for(Itens_Venda itven:lista) {

      
        modelo.addRow(new String[] {
            
            itven.getid_venda().toString(), itven.getid_produto().toString(), pro.listar_Nome_Produto_ID_VENDA(itven.getid_produto()).toString(), itven.getquant_vendida().toString(), itven.getvalor_pagar().toString()  });
       
    }
    
}  

so ai o problema ele nao pega o primeiro registro
cadastra certo eu abro tanto o postgre como o mysql estao la cadastrado so que so mostra no JTABLE apartir do segundo cadastro, o cadastro 3 cadastro 4 assim por diante funciona so no primeiro cadastro que nao funciona alguem sabe que pode estar acontecendo??????

3 Respostas

edineimanica
fabiodurgante:
seguinte tenho minha consulta

    public List<Itens_Venda> listar_Itens_Venda(Integer id_venda) {

      String sql = "SELECT * FROM itens_venda itv INNER JOIN produto p ON itv.id_produto = p.id_produto and itv.id_venda= ? ";         

        try {
            
             PreparedStatement stmt = getConexao().prepareStatement(sql);
           stmt.setInt(1, id_venda );

         ResultSet rs = stmt.executeQuery(); 
       rs.next();

     return  getItens_Venda(rs);
 
        } catch (SQLException sQLException) {
            System.out.println("Erro ao listar Itens Venda" + sQLException);
        }
        return null;
    } 


    private List<Itens_Venda> getItens_Venda(ResultSet rs) throws SQLException {
        if(rs == null)
            return null;
        
        List<Itens_Venda> lista = new ArrayList<Itens_Venda>();
        while(rs.next()) {
            Itens_Venda iven = new Itens_Venda();
            
            iven.setid_venda(rs.getInt("id_venda"));
         iven.setid_produto(rs.getInt("id_produto"));
       //    iven.setid_produto(rs.getInt("id_cliente"));
         iven.setquant_vendida(rs.getInt("quant_vendida"));
         iven.setvalor_pagar(rs.getDouble("valor_pagar"));
     
            lista.add(iven);
        }
        return lista;
    }

depois pego o resultado e coloco numa lista

por fim coloco em um JTABLE

 private void preenche_Tabela_Itens_Venda() {
          DefaultTableModel modelo = new javax.swing.table.DefaultTableModel(
            new Object [][] {},
            new String [] {"Cod venda", "Cod Produto" , "Nome Produto", "Quant Vendida", "Valor A Pagar"}
        );
   Itens_VendaDao ITVendaD = new Itens_VendaDao() ;
    tabela.setModel(modelo);
   
ProdutoDao pro = new ProdutoDao();
   List<Itens_Venda> lista = ITVendaD.listar_Itens_Venda(ven.getid_venda() );  //aqui eu pego o ID da venda e passo pra funcao 
   
    for(Itens_Venda itven:lista) {

      
        modelo.addRow(new String[] {
            
            itven.getid_venda().toString(), itven.getid_produto().toString(), pro.listar_Nome_Produto_ID_VENDA(itven.getid_produto()).toString(), itven.getquant_vendida().toString(), itven.getvalor_pagar().toString()  });
       
    }
    
}  

so ai o problema ele nao pega o primeiro registro
cadastra certo eu abro tanto o postgre como o mysql estao la cadastrado so que so mostra no JTABLE apartir do segundo cadastro, o cadastro 3 cadastro 4 assim por diante funciona so no primeiro cadastro que nao funciona alguem sabe que pode estar acontecendo??????

Veja que vc antes de chamar o método getItens_Venda....
você já executou um next, e lá você estava no primeiro registro....

neoCortex
fabiodurgante:
seguinte tenho minha consulta

    public List<Itens_Venda> listar_Itens_Venda(Integer id_venda) {

      String sql = "SELECT * FROM itens_venda itv INNER JOIN produto p ON itv.id_produto = p.id_produto and itv.id_venda= ? ";         

        try {
            
             PreparedStatement stmt = getConexao().prepareStatement(sql);
           stmt.setInt(1, id_venda );

         ResultSet rs = stmt.executeQuery(); 
       rs.next();// Voce já havia avançado 1 ponteiro no resultset aqui sendo que daqui pra baixo vai pegar a partir do 2º. Retire isto e teste

     return  getItens_Venda(rs);
 
        } catch (SQLException sQLException) {
            System.out.println("Erro ao listar Itens Venda" + sQLException);
        }
        return null;
    } 


    private List<Itens_Venda> getItens_Venda(ResultSet rs) throws SQLException {
        if(rs == null)
            return null;
        
        List<Itens_Venda> lista = new ArrayList<Itens_Venda>();
        while(rs.next()) {
            Itens_Venda iven = new Itens_Venda();
            
            iven.setid_venda(rs.getInt("id_venda"));
         iven.setid_produto(rs.getInt("id_produto"));
       //    iven.setid_produto(rs.getInt("id_cliente"));
         iven.setquant_vendida(rs.getInt("quant_vendida"));
         iven.setvalor_pagar(rs.getDouble("valor_pagar"));
     
            lista.add(iven);
        }
        return lista;
    }

depois pego o resultado e coloco numa lista

por fim coloco em um JTABLE

 private void preenche_Tabela_Itens_Venda() {
          DefaultTableModel modelo = new javax.swing.table.DefaultTableModel(
            new Object [][] {},
            new String [] {"Cod venda", "Cod Produto" , "Nome Produto", "Quant Vendida", "Valor A Pagar"}
        );
   Itens_VendaDao ITVendaD = new Itens_VendaDao() ;
    tabela.setModel(modelo);
   
ProdutoDao pro = new ProdutoDao();
   List<Itens_Venda> lista = ITVendaD.listar_Itens_Venda(ven.getid_venda() );  //aqui eu pego o ID da venda e passo pra funcao 
   
    for(Itens_Venda itven:lista) {

      
        modelo.addRow(new String[] {
            
            itven.getid_venda().toString(), itven.getid_produto().toString(), pro.listar_Nome_Produto_ID_VENDA(itven.getid_produto()).toString(), itven.getquant_vendida().toString(), itven.getvalor_pagar().toString()  });
       
    }
    
}  

so ai o problema ele nao pega o primeiro registro
cadastra certo eu abro tanto o postgre como o mysql estao la cadastrado so que so mostra no JTABLE apartir do segundo cadastro, o cadastro 3 cadastro 4 assim por diante funciona so no primeiro cadastro que nao funciona alguem sabe que pode estar acontecendo??????

Como citado pelo amigo acima, tem um avanço no ponteiro sobrando retire o mesmo e teste. Se vc tivesse recriado o resultSet seria outra história... Comentei ele para vc achar fácil.

Qualquer coisa é só dar um grito!!! :shock: :shock: :shock: :shock: :shock:

Um grande Abraço!!!

fabiodurgante

legal funcionou beleza valeu ai a todos pela ajuda valeu!!!

Criado 20 de dezembro de 2008
Ultima resposta 21 de dez. de 2008
Respostas 3
Participantes 3