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.
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: