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.