Bom dia, eu utilizo o netbeans, então eu criei um JFrame adicionei uma tabela e vinculei ela a uma tabela do banco de dados, eu preciso somar uma coluna desta tabela ex:
Cliente | Valor
Fulano 1
Beltrano 2
Total 3
O máximo que consegui pesquisando na internet foi fazer contar o total de linhas, queria saber se alguem pode me ajudar a me dizer como faço para somar essa coluna e jogar em um jtextfield ou jlabel,
desde já agradeço a atenção.
Tratando-se de apenas uma coluna, basta obter o valor da célula em questão (que, coincidentemente será o ponto de encontro de uma linha com a dita coluna). Após obter o valor, você precisará armazenar o mesmo em uma variável. Caso seja a primeira linha, este objeto deve possuir valor zero. A partir da primeira, ele será acrescido do valor da coluna que está sendo lida naquele momento.
na verdade vou precisar de mais colunas, no total são três, eu não sei como faço para obter o valor da coluna, minha duvida é saber se existe algum método em que eu informe a posição, no caso da minha tabela preciso somar as posições 2,3 e 4 da tabela do banco.
pensei em criar um for e percorrer todas as linhas da tabela e somar somente aquele determinado campo, algo como “total += tabela.coluna” claro que isso a grosso modo sem tratar os tipos das variaveis.
só que não sei se é possivel fazer isso e caso seja possivel, como fazer…
é possivel sim cara, é algo ate simples, como ja foi explicado, percorre a tabela, se for a celula q vc deseja somar o valor vc incrementa o valor de alguma variavel.
Outra coisa, procure implementar seu proprio tablemodel:
Eu agradeço a ajuda, mais apenas para informar eu pesquisei no google e em outros fórums antes de postar aqui, inclusive é mais facil procurar no google primeiro.
Não precisa digitar login e senha, clicar em criar tópico nem nada, …
é possivel sim cara, é algo ate simples, como ja foi explicado, percorre a tabela, se for a celula q vc deseja somar o valor vc incrementa o valor de alguma variavel.
Outra coisa, procure implementar seu proprio tablemodel:
[quote=GabrielMantini]Cara, você pode incluir a função SUM(“coluna”) do proprio sql, ela é usada no proprio select, da mesma forma que o count.
Por exemplo: SELECT SUM(“NOME DA COLUNA”) FROM “TABELA”…[/quote]
O problema é que declarei tudo varchar no banco, mais acho que essa vai ser a saida, o problema é que ja tem uns 500 registro nessa tabela, mais obrigado!
Creio que estou no caminho de uma solução, achei um tópico no forum e utilizei o seguinte:
double soma = 0;
for (int i = 0; i < clientetable.getColumnCount(); i++) {
Double valor = (Double) clientetable.getValueAt(i, 2);
soma += valor.doubleValue();
}
clitotaltf.setText(String.valueOf(soma));
porem agora me retorna um erro acho que é de casting:
run:
[EL Info]: 2013-07-19 08:06:14.247--ServerSession(21701394)--EclipseLink, version: Eclipse Persistence Services - 2.5.0.v20130507-3faac2b
[EL Info]: connection: 2013-07-19 08:06:14.664--ServerSession(21701394)--file:/C:/Users/mavitech/Desktop/SOFTWARE AGTECH/Projeto/AgTech/build/classes/_agtechPU login successful
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
at br.com.view.FaturamentoView.jButton1ActionPerformed(FaturamentoView.java:323)
at br.com.view.FaturamentoView.access$900(FaturamentoView.java:19)
at br.com.view.FaturamentoView$FormListener.actionPerformed(FaturamentoView.java:265)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:696)
at java.awt.EventQueue$4.run(EventQueue.java:694)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Mais eu não entendo pq eu estou convertendo para double o valor recebido da linha, pensei que fosse a maneira de converter o erro dai utilizei o Double.parseDouble() mas dai da um erro de objeto informando que requer uma string e foi encontrado um objeto.
Mas existe tbm a função next, que retorna falso quando não existe a proxima row na tabela.
Mas quanto ao problema de somar os valores, cara, vai dar mto trabalho qualquer coisa que você vá fazer, acho que mais trabalho que criar uma outra tabela e copiar os 50 registros que você disse ter porém usando o tipo de dados mais apropriado, pra evitar essas conversoes desnecessárias.