Fórum Problemas com JTable #554287

21/05/2016

0

Boa noite, estou com um problema em um JTable. Fiz um método na DAO que calcula um total de produtos consumidos, este método é chamado na Tela no botão cadastrar, toda vez que cadastro um consumo preciso que vá calculando a quantidade de acordo com o valor do produto e mostra um valor total. Na verdade ele está calculando porém apenas no primeiro cadastro, caso eu cadastre outros consumos, o que me mostra na tela é apenas o primeiro consumo, caso eu delete outros e deixe apenas o consumo da primeira linha da tabela é somente este que será visualizado. Abaixo o código do método. Por favor me ajudem!!!

Método da Tela Consumo

void mostrar(String buscar){
              
        consumoDAO.mostra(buscar);     
        lblTotalConsumo.setText("Valor R$. " + consumoDAO.totalConsumo);
        
    }	



Método da DAO

public Object mostra(String buscar) {
             
        Consumo consumoVO = new Consumo();
        ConsumoDAO consumoDAO = new ConsumoDAO();
        ModeloTabelaConsumo modelo = new ModeloTabelaConsumo();
        totalConsumo = 0.0;
        
        String sql = ("SELECT c.codConsumo, c.codHospedagem, c.codProduto, p.nomeProduto, " +
                      " c.quantidade, c.valorConsumo, c.status " +
                      " from consumo c " +
                      " INNER JOIN produto  p ON c.codProduto = p.codProduto " +
                       "INNER JOIN hospedagem AS H ON H.codHospedagem = C.codHospedagem " 
                     + " WHERE c.codHospedagem = " + buscar + " order by c.codConsumo ");
      
        getBanco().abrir();
        try {
            Statement stm = getBanco().getConexao().createStatement();
            //Faz a leitura no banco
            ResultSet rs = stm.executeQuery(sql);
   
            if (rs.next() == true) { //Achou
                consumoVO = new Consumo();
                consumoVO.setCodConsumo(rs.getInt("codConsumo"));
                consumoVO.setCodHospedagem(rs.getInt("codHospedagem"));
                consumoVO.setCodProduto(rs.getInt("codProduto"));
                consumoVO.setCodProduto(rs.getInt("nomeProduto"));                               
                consumoVO.setQuantidade(rs.getInt("quantidade"));
                consumoVO.setValorConsumo(rs.getDouble("valorConsumo"));
                consumoVO.setStatus(rs.getString("status"));
                              
                totalConsumo = totalConsumo + (rs.getInt("quantidade") * rs.getDouble("valorConsumo"));
                
               } 
            
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return consumoVO;
    }

Lizy Panta

Lizy Panta

Responder

Posts

24/05/2016

Renan Di

No seu código está faltando um laço para iterar todos os resultados do resultSet ele deveria estar no lugar do if(rs.next()), por isso você só consegue pegar o primeiro resultado pois só lê a primeira linha do resultSet e mais nada, além disso já que há a possibilidade de se ler vários consumos o seu método deveria retornar um array e não apenas um objeto, o resultSet vai retornar todas as linhas da tabela que possuírem consumo com os parâmetros que você solicitou logo pode haver de 0 a n resultados. Use whyle com hasNext() e mude o tipo de retorno para algo do tipop Object[] ou ainda melhor ArrayList<SeuTipo>.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar