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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar