SOMAR VALORES DE UMA COLUNA DE UM BD E MOSTRAR O RESULTADO NUM JLABEL

06/03/2017

0

Olá, pessoal!
Estou fazendo uma aplicação simples, a fim de treinar programação Java, para controlar o gasto de combustível de um veículo.
Tenho uma tabela criada no Access (entendo que ele não é considerado um bd, mas tudo bem), a qual possui, entre outras, uma coluna para armazenar os valores em R$ dos abastecimentos. Para gravar e consultar tudo está rodando legal. Todavia, quando eu tento somar a coluna de valores e apresentar o resultado da soma em um jlabel, não consigo. Dá o erro "Column not found: select sum(valor_abastec)from abastecimento". Será que alguém pode me ajudar a encontrar o erro? Desde já agradeço.
Vai partes do código da aplicação:

private void jBtGravarActionPerformed(java.awt.event.ActionEvent evt) {

try{

if (jTxtKmAbastec.getText().equals(""))
{
JOptionPane.showMessageDialog(null, "Digite a kilometragem atual");
jTxtKmAbastec.requestFocus();
}
else if (jTxtQuantCombust.getText().equals(""))
{
JOptionPane.showMessageDialog(null, "Digite a quantidade de combustível");
jTxtQuantCombust.requestFocus();
}
else if (jTxtValor.getText().equals(""))
{
JOptionPane.showMessageDialog(null, "Digite o valor do abastecimento");
jTxtValor.requestFocus();
}
else
{
quantabastec=Double.parseDouble(jTxtQuantCombust.getText());
valorabastec=Double.parseDouble(jTxtValor.getText());
String nome = "Deseja salvar os dados?";
int escolha=JOptionPane.showConfirmDialog(null,nome,"Salvar",JOptionPane.YES_NO_OPTION);

if (escolha == JOptionPane.YES_OPTION)
{
String grava="INSERT INTO abastecimento (data_abastec,quant_abastec,valor_abastec,km_abastec)VALUES('"+jLblData.getText()+"','"+quantabastec/*jTxtQuantCombust.getText()*/+"','"+valorabastec/*jTxtValor.getText()*/+"','"+jTxtKmAbastec.getText()+"')";
conCombust.stat.executeUpdate(grava);
JOptionPane.showMessageDialog(null,"Dados gravados");
conCombust.executaSQL("SELECT * FROM abastecimento");
jTxtQuantCombust.setText("");
jTxtValor.setText("");
jTxtKmAbastec.setText("");

}
}
}
catch(SQLException erro)
{
JOptionPane.showMessageDialog(null, erro);
}
}

private void jBtLimparActionPerformed(java.awt.event.ActionEvent evt) {
//Limpa os dados dos jTxt's
jTxtKmAbastec.setText("");
jTxtQuantCombust.setText("");
jTxtValor.setText("");
jLblKmUltimoAbastec.setText("");
jLblEconomia.setText("");
jLblKmPercorridos.setText("");
jTxtKmAbastec.requestFocus();
jBtGravar.setEnabled(true);
}

private void jBtConsultarActionPerformed(java.awt.event.ActionEvent evt) {
try{
// mostra último abastecimento atual
nav=0;
DecimalFormat dec = new DecimalFormat("0.00");
conCombust.result.last();
jTxtKmAbastec.setText(conCombust.result.getString("km_abastec"));
jTxtQuantCombust.setText(conCombust.result.getString("quant_abastec"));
valorabastec = Double.parseDouble(conCombust.result.getString("valor_abastec"));
jTxtValor.setText(String.valueOf(dec.format(valorabastec)));
}
catch (SQLException erro)
{
Logger.getLogger(ControlCombustivel.class.getName()).log(Level.SEVERE, null, erro);
}
try{
// mostra o penúltimo abastecimento
conCombust.result.previous();
jLblKmUltimoAbastec.setText("Kilometragem no último abastecimento: "+conCombust.result.getString("km_abastec"));
}
catch(SQLException ex)
{
JOptionPane.showMessageDialog(null, "Não há registro anterior de abastecimento "+ex);
}
jBtGravar.setEnabled(false);
}

private void jBtCalcularActionPerformed(java.awt.event.ActionEvent evt) {
// Calcula a economia do veículo
double num = 0,num1 = 0,result,quant = 0,result1;
if(jTxtQuantCombust.getText().equals("")||jTxtValor.getText().equals("")||jTxtKmAbastec.getText().equals("")){

JOptionPane.showMessageDialog(null, "Clique em 'Consultar'");

}
else{

try{
conCombust.result.last();
num=Double.parseDouble(conCombust.result.getString("km_abastec"));
quant=Double.parseDouble(conCombust.result.getString("quant_abastec"));
}
catch(SQLException erro)
{
Logger.getLogger(ControlCombustivel.class.getName()).log(Level.SEVERE, null, erro);
}

try{
conCombust.result.previous();
num1=Double.parseDouble(conCombust.result.getString("km_abastec"));
}
catch (SQLException erro)
{
Logger.getLogger(ControlCombustivel.class.getName()).log(Level.SEVERE, null, erro);
}

result=num-num1;
result1=result/quant;
DecimalFormat df = new DecimalFormat("0.00");//Formata um float ou double para duas casas decimais
jLblKmPercorridos.setText("Seu veículo percorreu "+String.valueOf(result)+" kilômetros");
jLblEconomia.setText("e fez "+String.valueOf(df.format(result1))+" km/litro");
}
}

Aqui vai o código que tentei usar para somar a coluna e apresentar no jlabel:

private void jBtGastosActionPerformed(java.awt.event.ActionEvent evt) {
double total=0;
try{
conCombust.executaSQL("select * from abastecimento");
String gastos;
gastos = ("select sum(valor_abastec)from abastecimento");
conCombust.stat.execute(gastos);
while (conCombust.result.next()){
total=conCombust.result.getDouble(gastos);
jLblCustoTotal.setText(String.valueOf(total));
}
}
catch(SQLException erro)
{
JOptionPane.showMessageDialog(null, erro);
conCombust.executaSQL("select * from abastecimento");

}
}
Gildasio Lima

Gildasio Lima

Responder

Post mais votado

08/03/2017

Boa noite Gill,

não li sua aplicação toda, mas o que posso te ajudar é: na consulta "select sum(valor_abastec)from abastecimento", faz-se necessário a indicação de um alias para o somatório, exemplo sum(valor_abastec) as valor_abastec. Para que a aplicação tenha um nome para a chamada e atribuição a uma variável.

Espero ter ajudado e boa sorte em sua jornada!

Rafael Oliveira

Rafael Oliveira
Responder

Mais Posts

08/03/2017

Gildasio Lima

Olá, Rafael!
Bom dia!
Muito obrigado pela atenção. Porém, já havia encontrado uma solução (e aí, gostaria da opinião sua e de outros sobre tal), a qual parece estar funcionando muito bem. Não sei se apenas no Access que ela funciona, não testei com outro bd. Mas deu certo. Era muito simples: como o ResultSet mostra o resultado da consulta linha a linha da tabela do bd, criei uma variável com incremento recebendo os dados do próprio ResultSet, os quais foram se somando enquanto o while executava. Não sei se ficou claro, mas está aí o código:

     private void jBtGastosActionPerformed(java.awt.event.ActionEvent evt) {                                          
        double total=0;
        double quantid=0;
        try{
            conCombust.executaSQL("select * from abastecimento");
        while (conCombust.result.next()){
            total+=conCombust.result.getDouble("valor_abastec");
            quantid+=conCombust.result.getDouble("quant_abastec");
            jLblCustoTotal.setText(String.valueOf(df.format(total)));
            jLblQuantTotal.setText(String.valueOf(df.format(quantid)));
            }
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, erro);
            conCombust.executaSQL("select * from abastecimento");
            
        }
    }
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar