Como "pegar" VARIAVEL necessária para metódo funcionar?

5 respostas
javamysql
R

Ola. Minha 1ª pergunta no fórum e valeu desde já. Eu tenho uma pequena aplicação em construção e gostaria de uma ajuda. Estou usando JDBC com MySQL e JavaFX. A dúvida é a seguinte: Gostaria de saber COMO e se é POSSÍVEL o usuário escolher uma data para que um método execute uma query no banco MySQL e retorna um VALOR dessa consulta “personalizada” (acho que fala assim) para depois ser mostrado numa caixa de texto esse valor. Não sei se fui claro o suficiente. Já consegui, conectar com o banco, fazer um select simples de tudo que tem lá, mostrar numa lista, mas esse caso especifico, não consigo. Retorno um tal de NULLPointer (valor nulo) mas no MySQL tem coisas inseridas.
Segue uma previa do que tá dando erro:

public Gastos TotalGasto(Gasto gasto) {
        String consulta = "SELECT SUM(valores) FROM caixa WHERE valores IS NOT NULL AND data=?";
        Gasto saida = new Gasto();
        LocalDate data = despesa.getData();
        try{
            PreparedStatement stmt = connection.prepareStatement(consulta);
            stmt.setDate(1, Date.valueOf(data));
            ResultSet result = stmt.executeQuery();
            while (result.next()){
               double finalGasto = result.getDouble(1);
               gasto.setValor(finalGasto);
               saida = gasto;
            }
        }catch (SQLException ex){
            Logger.getLogger(GastoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return saida;
    }

O erro de NULLPOINTER é nessa linha:

stmt.setDate(1, Date.valueOf(data));

A duvida é porque esta dando esse erro de nullpointer se tem informação no banco? (quando faço no console do MySQL ele retorna o que eu preciso).
Explicando: Estou usando MVC. Na View tem um botão TOTAL DE GASTOS que chama do controller uma ação para o botão que tem essa chamada de metódo. Assim:

@FXML public void MostraTotalDeGastos() throws IOException { Gasto gasto = new Gasto(); LocalDate dataNaView = datePickerData.getValue(); if(dataNaView != null){ gasto = GastoDAO.TotalGasto(Gasto gasto);// AQUI CHAMA O METODO DA CLASSE DAO textFieldDosGastos.setText(String.valueOf(gasto.getValor())); System.out.println(gasto); } else { datePickerData.setValue(""); textFieldDosGastos.setText(" "); } // System.exit(0); (essa instrução esta aqui apenas para teste.. se eu tirar tudo e deixar isso o botao funciona bem) } }
Eu preciso passar também no método:

public Gastos TotalGasto(Gasto gasto) a data que vai ser escolhida no datePicker pelo usuário na View ficando assim:

para parar de dar o erro? Valeu a todos.

5 Respostas

Jubinha

Boa noite. No método TotalGasto(Gasto gasto) na linha LocalDate data = despesa.getData(); você tem o objeto despesa instanciado e o atributo Data setado. Acredito que seja esse o motivo do erro citado por ti.

R

Jubinha isso eu vi!!! :slight_smile: Essa instancia do LocalDate é porque na view o usuário VAI TER QUE ESCOLHER A DATA antes de clicar no botão onde tem esse evento. E por isso perguntei se tenho que passar isso também na assinatura do método ou não e porque esta dando erro de NULLPOINTER, mesmo tendo diversas datas no banco MySQL. Preciso saber se minha “lógica” esta errada (furada do ponto de vista técnico) ou se esta OK. O processo seria esse:
1 - Escolhe no datePicker a data para saber o TOTAL dos gastos
2 - Clica no botão que vai “pegar” data e colocar como PARAMETRO na função (explicando: a data que eu selecionar vai ser a escolhida no banco - não se sei isso é possível, talvez seja esse problema - e com essa data eu faço a instrução SQL que soma os valores SOMENTE DESSA DATA)
3 - Clique no botão da View que carrega esse método
4 - Com os parâmetros necessários, execução da consulta
5- Pego valor em Double e converto em String para colocar no TextField
6 - Mostro no TextField
7 - Fica tudo lindo!!!

Se tiver alguma coisa errado com esses passos, estou pronto para aceitar correções e sugestões (inclusive nos métodos). Valeu por enquanto.

Jubinha

Eu acho que vc deveria colocar na assinatura LocalDate data como foi citado por ti mesmo.

R

Cara obrigado pelas dicas que você passou até agora. Mas estou mesmo precisando de uma ORIENTAÇÃO MAIS DIRETA (faça isso… mude aquilo) para resolver esse problemas. Eu também acho que deveria mas já fiz isso e também não deu certo.
Vou gravar um vídeo para mostrar o que REALMENTE eu preciso e o que REALMENTE acontece. De qualquer forma

R

Alguem poderia me ajudar com essa “LÓGICA”? Desde já agradeço

O processo seria esse:
1 - Escolhe no datePicker a data para saber o TOTAL dos gastos
2

  • Clica no botão que vai “pegar” data e colocar como PARAMETRO na
    função (explicando: a data que eu selecionar vai ser a escolhida no
    banco - não se sei isso é possível, talvez seja esse problema - e com
    essa data eu faço a instrução SQL que soma os valores SOMENTE DESSA
    DATA)
    3 - Clique no botão da View que carrega esse método
    4 - Com os parâmetros necessários, execução da consulta
    5- Pego valor em Double e converto em String para colocar no TextField
    6 - Mostro no TextField
    7 - Fica tudo lindo!!!

Abraço a quem puder me ajudar.

Criado 3 de julho de 2016
Ultima resposta 6 de jul. de 2016
Respostas 5
Participantes 2