Como retornar um sql de um total para um Jlabel?

22 respostas Resolvido
java7java-sejava
M

Bom dia

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.

private void totalGeralEstoque() {
String sql = "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 (Exception e) {
}
}

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.

22 Respostas

J

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.

M

Bom dia

@Jonathan_Medeiros e como eu setaria?

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

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.

Exemplo:

Double valorTotal = rs.getDouble("Total");
JLabel.setText(Double.toString(valorTotal));
M

Bom dia @Jonathan_Medeiros

Como havia repetido varias vezes esse exemplo nao daria certo pois nao existe esse campo TOTAL, este campo foi criado pela consulta.

J

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 ?

M

@Jonathan_Medeiros

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

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

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

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

Exatamente, você colocou o sql. Com o resultado de um sum terá o total para usar onde quiser na sua aplicação.

J

Implementa a solução que o @javaflex mencionou acima, ou faça algo como abaixo por exemplo.

Double valorCorrente = 0;
Double valorTotal = 0;

While(rs.next()) {
    valorCorrente = rs.getDouble("Total");
    valorTotal += valorCorrente;
} 

JLabel.setText(Double.toString(valorTotal));
M

Só uma pergunta
valorCorrente = rs.getDouble(“Total”);

este “Total” no caso eu teria que ter este campo no meu banco de dados???

J

Não. Somente no seu select.

J

Este é o campo do seu select!

M
private void totalGeralEstoque() {
String sql = "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 (Exception e) {
}
}

Aonde eu insiro este codigo

Double valorCorrente = 0;
Double valorTotal = 0;

While(rs.next()) {

valorCorrente = rs.getDouble(Total);

valorTotal += valorCorrente;

}

JLabel.setText(Double.toString(valorTotal));

J

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!

private void totalGeralEstoque(){
	Double valorCorrente = 0;
	Double valorTotal = 0;
	
	String sql = " 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(Exception e) {
		System.out.println("Ocorreu um erro ao tentar recuperar o valor total!");
	}
	
	JLabel.setText(Double.toString(valorTotal));
}
M

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

deu erro


o sql esta certo, no workbench retornou corretamente.

nao me deu o total

M

alterei o codigo para

private void totalGeralEstoque(){

int valorCorrente = 0;

int valorTotal = 0;
String sql = " 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(Exception e) {
	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

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

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.

M

Obrigado gente pela ajuda,

realmente eu mudei de maiscula para minuscula,

mas as duas variaveis la em cima da este erro

ele pede pra converter para Int , por isso eu converti

M
Solucao aceita

Muito obrigado consegui

alterei o codigo para

Double valorCorrente = 0.0;
    Double valorTotal = 0.0;

eu saquei q Double tem q retornar double.

muito obrigado mesmo

Criado 19 de abril de 2018
Ultima resposta 19 de abr. de 2018
Respostas 22
Participantes 4