Aqui me parece que o campo no banco está com o tipo DATE ou DATETIME, certo? Se for isso, então você não deveria converter para string nas outras queries. Por exemplo, aqui:
pstmt.setString(6, sdf.format(ganhos.getData_ganhos()));
Se o campo é uma data (o tipo na tabela do banco é DATE, DATETIME, etc), então grave a data diretamente:
pstmt.setDate(6, ganhos.getData_ganhos());
Uma coisa que você precisa entender é que datas não têm formato.
Uma data é apenas um conceito, uma ideia: ela representa um ponto específico no calendário.
Por exemplo, a data de “15 de janeiro de 2020”, representa isso: o ponto específico do calendário que corresponde ao dia 15 do mês de janeiro do ano de 2020. Para expressar essa ideia em forma de texto, eu posso escrevê-la de diferentes formas:
- 15/01/2020 (um formato bem comum em muitos países, incluindo o Brasil)
- 1/15/2020 (formato americano, invertendo o dia e mês)
- 2020-01-15 (o formato ISO 8601)
- Quinze de Janeiro de 2020 (em bom português)
- January 15th, 2020 (em inglês)
- 2020年1月15日 (em japonês)
- e muitos outros…
Repare que cada um dos formatos acima é diferente, mas todos representam a mesma data (os mesmos valores numéricos do dia, mês e ano).
Quando você grava uma data no banco, ele grava apenas os valores (os números), em algum formato interno que não importa (é problema dele gerenciar isso). É claro que, quando eu faço SELECT ou imprimo na tela, a data tem que ser mostrada em algum formato. Mas só porque “o SELECT mostrou dd/mm/aaaa”, isso não significa que a data necessariamente está gravada naquele formato.
Dito isso, quando você faz queries (seja SELECT, UPDATE, INSERT, o que for), você manipula o Date. Quando for mostrar na tela, aí você converte o Date para string (usando o SimpleDateFormat, por exemplo). Se tem uma string que representa a data (no caso da pesquisa), aí você faz o oposto (usa parse para converter a string para data).