Carinha, você não está usando um jeito legal de usar um statement. Esse negócio que você está fazendo
stmt = conexao.con.createStatement();
stmt.executeUpdate("insert into TabFuncao( nome, dataCadastro) values ('" + getNome() +"','"+ data.PegaDataAtual() +"')");
Pode dar um monte de melecas:
-
O sua operação SQL não vai ficar no cache do banco de dados, fazendo com que sua consulta seja extremamente ineficiente.
-
Você vai ter que fazer códigos específicos para cada banco de dados em que você for trabalhar, para converter a data em um formato que o banco de dados aceite.
O certo é fazer isto:
stmt = conexao.con.prepareStatement("insert into tabFuncao (nome, dataCadastro) values ( ?, ? )");
stmt.setString(1,getNome());
stmt.setDate(2, data.PegaDataAtual());
stmt.executeUpdate();
Por que tem que fazer assim? Porque assim:
- o java vai passar para o driver JDBC a tarefa de escrever os campos em um formato aceitável para o banco de dados.
- o banco de dados vai ter a “dica” de que esta operação possui parâmetros variáveis e pode armazenar a estratégia de acesso a banco em um cache (isso vale mais para “SELECTS” que para updates.
- Montar sql “na unha” abre o caminho para diversas falhas de segurança, porque um cara malicioso pode escrever alguma operação SQL para achar usuários e senhas, por exemplo, ou fazer outras coisas mais assustadoras, que não tou lembrando agora.
Uma vez recebi uma problema de que uma consulta estava levando 24 segundos para ser feita no banco de dados. Por que? Porque estavam usando “createStatement()” e montando o SQL na unha como você está fazendo.
Mudei a consulta para uma forma parametrizada com o PrepareStatement e essa consulta passou a ser feita em 0,22 segundos.
P.S: se o seu data.PegaDataAtual() retorna um java.util.Date, o setDate precisa de um java.sql.Date; Dá pra fazer uma conversão deste tipo com uma operação como esta
java.sql.Date dataConvertida = new java.sql.Date(dataoriginal.getTime());