[Resolvido]Java.lang nullpointerexception

Pessoal boa noite estou querendo pegar a soma dos valores de uma coluna pa_fornecedor , mas apenas o valor da coluna pa_fornecedor mas apresenta o erro java.lang nullpointerexception.Irei mostrar meu código e minha tabela no banco de dados postgresql para vocês verem.

Codigo java

identar texto   public void totalValor(){
      
        try {
        con=conecta.conexao();
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(ReembolsoDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
       

    try {
        
         String Tabela = "tb_passivo";
        String query = "SELECT SUM(pa_fornecedor) FROM "+ Tabela ;


     
        PreparedStatement Stmt = con.prepareStatement(query);

        ResultSet rs = Stmt.executeQuery();
       while(rs.next()){ 
        valor_fornecedor.setText(rs.getString(1));


       }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, "Erro em buscar a quantidade"+e);
    }        
}

Meu banco

Amigo, parece que o objeto “valor_fornecedor” que você está tentando acessar está nulo, sendo assim o NullPointer é eminente. Dê um New nele antes de utilizar.

Também recomendo utilizar o gets (getString, getText…) do resultSet passando o nome da coluna, assim se você mudar orde de campos não atrapalha sua aplicação, então sua query ficaria algo assim:

SELECT SUM(pa_fornecedor) as valorFornecedor FROM "+ Tabela

E você o pegaria assim lá embaixo valor_fornecedor.setText(rs.getString("valorFornecedor "));

man obrigado por responder eu fiz as alterações mas não rodou

Manda um Log do erro que dá no Console, mostra aonde exatamente ele dá o NullPointer. Porque nesses casos podem ser em vários lugares. NullPointer dá quando tenta acessar um Objeto nulo, olhando por cima, as variaveis “con” e “valor_fornecedor” eu diria que podem estar nulas, o “rs” não acredito que seja. Tenta mandar um Log do que tá acontecendo

blz man vou manda aqui o log e o codigo

man e debuguei o codigo ele mudou de erro, o erro que aparece é o nome da coluna pa_fornecedor não foi encontrado nesse rs.next()

Meu codigo java

identar 

Connection con ;
ResultSet rs ;
PreparedStatement pst ;

 Conecta conecta = new Conecta();

public void totalValor(){

        try {
        con=conecta.conexao();
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(ReembolsoDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
       

    try {
        String sql="SELECT SUM(pa_fornecedor) FROM tb_passivo";
        
         //String Tabela = "tb_passivo";
       // String query = "SELECT SUM(pa_fornecedor) FROM "+ Tabela ;


       Statement statement = con.createStatement();     

ResultSet rs = statement.executeQuery(sql);

       if(rs.next()){ 
          
           
        valor_fornecedor.setText(rs.getString("pa_fornecedor"));


       }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, "Erro em buscar a quantidade"+e);
    }        
}

Não vai dar certo porque essa coluna não vem no select, você usou uma função SUM(pa_fornecedor).

Se quiser que funcione assim, você precisar dar um “apelido” para o retorno, a Query ficaria assim:

String sql=“SELECT SUM(pa_fornecedor) as retorno FROM tb_passivo”;
OU
String sql=“SELECT SUM(pa_fornecedor) retorno FROM tb_passivo”;

E pra acessar esse valor:

valor_fornecedor.setText(rs.getString(“retorno”));

Mas não se preocupa com isso agora, deixa do jeito que você tinha feito e tenta mandar no Log qual o erro, geralmente gera um Log completo do que deu errado.

Tenho quase certeza que o problema é essa linha:
valor_fornecedor.setText(rs.getString(“pa_fornecedor”));

Coloca isso no lugar dela e vê se o erro continua.
System.out.println(rs.getString(1));

Isso vai Printar o resultado no seu console, se colocar isso e parar de dar erro é porque o objeto que você guarda o resultado está nulo e o problema é nele.

puts man foi, só foi eu colocar esse comando rs.getString(1) no lugar do valor_fornecedor.setText(rs.getString(“pa_fornecedor”)).Muito obrigado

Man mais uma vez obrigado pela ajuda mais desculpa minha ignorância mas pq quando coloquei isso rs.getString(1) ele foi ?

Do jeito que você falou está do mesmo jeito que no começo, se você trocou :
valor_fornecedor.setText(rs.getString(1));
por
rs.getString(1)

Ainda não está certo, porque você não está guardando o valor em nenhum lugar.
Tipo, se for a título de curiosidade para ver como funciona a conexão, tudo bem.
Mas explicando o que aconteceu é o seguinte

Explicando essa linha em partes:
valor_fornecedor.setText(rs.getString(“pa_fornecedor”));

Isso você vai ler de dentro pra fora, ou seja, aqui “rs.getString(“pa_fornecedor”)” ele está pegando o retorno do Banco de Dados.

valor_fornecedor.setText(); aqui ele iria colocar o retorno nesse Objeto, porque isso é um objeto.
Mas ele dava NullPointer porque não conseguia acessar o objeto, ou seja, ele estava Nulo, pra você não ter um objeto nulo precisa instancia-lo (Objeto objeto = new Objeto()).

Eu recomendo você estudar um pouco POO (Orientação a Objeto) para entender melhor isso, é um conceito.
Recomendo fazer isso antes de avançar na conexão com banco de dados e outros.

Qualquer outra dúvida é só falar.
Abs

então ricardo como eu iria instanciar o objeto nesse casso o valor_fornecedor.setText, o valor_fornecedor vem de um campo de texto, em que eu vou recuperar o conteudo na coluna do banco de dados e colocar no campo de texto usando o valor_fornecedor.setText.