Problema de conversão de Date (do pacote java.util) para Date (do pacote java.sql)[Resolvido]

Oi, pessoal!!!

Eu estou criando uma loja virtual só que eu tenho um projeto em C#, mas resolvi pegar o mesmo projeto e recriá-lo em Java, para treinar um pouco o que eu aprendi, quando eu estava no curso de desenvolvimento, o cadastro que eu implementei não tinha dados de data, então eu não liguei pois eu pensava que o PreparedStatement, continha algum método para esse tipo de dados, só que quando eu criei as classes básicas eu usei a classe Date do pacote java.util.* .

Mas quando eu chegava na parte do repositório de dados descobri que o tipo de dados do PreparedStatement usa é diferente, então tentei fazer o cast, ele compilou tudo certinho, mas na hora de incluir deu pau.

O Cast ficou assim.

      PreparedStatement smt = Con.preparedstatement(sql);
      //instrução insert

     smt.setInt(1, funcionario.getCodigo());
     smt.setDate(2,(java.sql.Date) funcionario.getDataNascimento()); //aqui eu fiz o cast

Só que quando eu vou inserir um registro no banco, a página me retorna um erro dizendo que não foi possível fazer cast, isso eu resolvo mudando na classe básica o tipo de data do funcionário, mas eu gostaria de saber se existe outra opção.

Desculpe-me se eu não fui claro o suficiente, sou iniciante em Java.

vc nao pode fazr o cast diretamente… java.util.Date e java.sql.Date não estão na mesma árvore de herança.

vc pod fazr o seguinte:

smt.setDate(2, new java.sql.Date(funcionario.getDataNascimento().getTime()));

tente assim:

smt.setDate(2, new java.sql.Date(funcionario.getDataNascimento().getTime()));

Apenas lembrando, java.sql.Date vai tirar a hora da sua data, se vc precisa persistir a informação com a hora vc deve usar java.sql.Timestamp, se instancia da mesma forma que o Date.

Melhor ainda é baixar o framework spring. Ele possui classes muito similares a do java para manipulação de recordsets, mas com as seguintes vantagens:

a) Trabalham diretamente com os tipos de datas do Java;
b) Lançam RuntimeExceptions quando dá problema de banco (nada de ficar colocando try…catch para SQLException em todo lugar);
c) Garantem o fechamento de ResultSets, Statements e Connections;
d) Suportam facilmente pools de conexão;
e) Integradas com o resto do Spring.

Para mais informações:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html

A curva de aprendizado é mínima. Os recursos mais avançados (como RowMappers) podem ser deixados de lado no início. Vale muito a pena conhecer.

Fora que o Spring JDBC Template oferece uma ampla gama de soluções para se trabalhar com procedures.

Mas para mim o melhor é como ele trata as exceptions. Caso vc precise tratar um chave primaria duplicada, o JDBC DAO Templete, de forma independendo do banco de dados, irá lançar uma exception significativa para vc, bem melhor que ter que ficar dando try catch na sql exception e buscando o codigo para saber qual erro aconteceu.

Como foi dito acima, a curva de aprendizado é minima (na verdade basta olha que vc entende), é leve e só traz beneficios.

Oi, pessoal estou aqui para agradecer as dicas que vcs me deixaram, funcionou, mas quando fui consultar o banco de dados a data está errada, eu coloquei a data certa, mas salvou no banco a seguinte data: 1970-01-01.

Como faço para corrigir o problema?