Eu tenho um comando em mysql q retorna o total dos valores de todos os produtos, ou seja o valor total em estoque, porem não existe este campo no banco de dados, foi feito uma consulta para retornar o valor total.
privatevoidtotalGeralEstoque(){Stringsql="select sum(pro.qtdade * pro.preco_compra) as Total from produto"+" pro inner join marca mar on (PRO.id_marca = MAR.id)"+" where mar.id >=1 and pro.qtdade >= 1";try{pst=conexao.prepareStatement(sql);rs=pst.executeQuery();}catch(Exceptione){}}
Como eu posso retornar isso em uma jlable
sendo os exemplos que eu encontro é: jLabelTotalGeral.setText(rs.getString(“total”));
mas como tinha dito não existe o campo total, pois é uma consulta q criei para retornar o valor total.
Qual o problema que está tendo ?
Da forma que você fez basta recuperar o valor que o select retorna e setar no seu JLabel que vai funcionar normalmente.
sendo que o exemplo q eu dei nao daria certo pois o fato do campo total nao existir no banco de dados, foi criado um consulta sql (view) para retornar o valor total geral do estoque
J
Jonathan_Medeiros
Por que você diz que não daria certo ?
A coluna existe na consulta, tem o valor calculado, sendo assim é possível, ela não precisa existir fisicamente armazenando valores estáticos para que seja possível recuperar e trabalhar com os valores da mesma!
Neste caso você teria que criar uma variável para receber o valor e depois de recuperá-lo setar o mesmo no JLabel.
Como havia repetido varias vezes esse exemplo nao daria certo pois nao existe esse campo TOTAL, este campo foi criado pela consulta.
J
Jonathan_Medeiros
Como te disse antes, funciona sim! (Mas não é aplicável no seu caso).
Como você não havia sido claro com sua dúvida explicando detalhadamente o que você precisava, porque conforme o post você queria atribuir um total que a consulta retorna em um JLabel, porém com a imagem eu percebi que você quer calcular o valor total de todos os itens exibidos na JTable correto ?
Isso mesmo. vc esta correto? não sei como fazer isso.
eu consegui somar tudo de outra forma, mas a conta não bate da uma diferença não sei pq
Me da uma luz
J
Jonathan_Medeiros
Mostra a forma que você utilizou postando o código para que possamos ver o que você pode mudar ou melhorar para que apresente o resultado da forma correta.
J
javaflex
Eu teria respondido o mesmo que o colega. O que ficou evidente na sua pergunta inicial foi um sql que retorna esse total, então bastava chamar o next e atribuir o valor retornado do resultset onde quiser. Isso funciona, se não é seu caso agora ai é outra história.
M
Maks_Silva
gente desde o primeiro post eu deixei bem especificado, coloquei até o sql q retorna o total geral do estoque,
em relação ao código eu não tenho e não sei como fazer,
Alguem tem alguma solução???
se tiverem ficarei muito grato
J
javaflex
Exatamente, você colocou o sql. Com o resultado de um sum terá o total para usar onde quiser na sua aplicação.
J
Jonathan_Medeiros
Implementa a solução que o @javaflex mencionou acima, ou faça algo como abaixo por exemplo.
Só uma pergunta
valorCorrente = rs.getDouble(“Total”);
este “Total” no caso eu teria que ter este campo no meu banco de dados???
J
javaflex
Não. Somente no seu select.
J
Jonathan_Medeiros
Este é o campo do seu select!
M
Maks_Silva
privatevoidtotalGeralEstoque(){Stringsql="select sum(pro.qtdade * pro.preco_compra) as Total from produto"+" pro inner join marca mar on (PRO.id_marca = MAR.id)"+" where mar.id >=1 and pro.qtdade >= 1";try{pst=conexao.prepareStatement(sql);rs=pst.executeQuery();}catch(Exceptione){}}
Vou te passar a resposta para te ajudar, porém te recomendo fortemente a rever sua lógica de programação, pois esta é uma implementação simples com conceitos básicos, não me considere chato por te dizer isso, é somente um conselho para que você não morra na praia dentro do mercado de trabalho!
privatevoidtotalGeralEstoque(){DoublevalorCorrente=0;DoublevalorTotal=0;Stringsql=" select sum(pro.qtdade * pro.preco_compra) as Total from produto "+" pro inner join marca mar on (PRO.id_marca = MAR.id) "+" where mar.id >=1 and pro.qtdade >= 1 ";try{pst=conexao.prepareStatement(sql);rs=pst.executeQuery();While(rs.next()){valorCorrente=rs.getDouble(“Total”);valorTotal+=valorCorrente;}}catch(Exceptione){System.out.println("Ocorreu um erro ao tentar recuperar o valor total!");}JLabel.setText(Double.toString(valorTotal));}
M
Maks_Silva
obrigado, aceito esta critica, o q vc recomenda para reforçar a logica???
tive q trocar Double por int, troquei por float mas nao aceitou
Stringsql=" select sum(pro.qtdade * pro.preco_compra) as Total from produto "+" pro inner join marca mar on (PRO.id_marca = MAR.id) "+" where mar.id >=1 and pro.qtdade >= 1 ";try{pst=conexao.prepareStatement(sql);rs=pst.executeQuery();While(rs.next());{valorCorrente=rs.getInt("Total");valorTotal+=valorCorrente;}}catch(Exceptione){System.out.println("Ocorreu um erro ao tentar recuperar o valor total!");}jLabelTotalGeral.setText(Double.toString(valorTotal));
}
pq nao aceitou double e tinha q colocar um ponto e virgula no while
H
Heitor_Veloso
isso que você colocou está errado, o Java é case sensitive com as variáveis While é diferente de while você tem que mudar para while(rs.next()){
Você colocou sua variável valor total como inteiro e depois no jLable você usou o método Double, ai vai dar erro mesmo, tem que usar compatível, ou tudo int, ou tudo double.
Aqui você usa um getInt então o retorno só pode ser inteiro, se quer um retorno do tipo double tem que fazer getDouble.
Os seus erros estão acontecendo por falta de atenção.
H
Heitor_Veloso
recomendo que copie o código que te passaram acima e apenas altere o While por while, isso deve resolver o problema. Como ele deve ter feito rápido para te ajudar não deve ter reparado que fez essa troca, mas se você utiliza netbeans ou eclipse te mostraria que aquela linha tinha erro e era sua função ler qual o erro e mudar.