Problema no SimpleDateFormat[RESOLVIDO]

Fala Galera, estou com um pequeno problema, mas não to conseguindo resolver.

Seguinte, recebo dados de um formulario jsp. Duas datas como String"dataInicio" e “dataFim”, quando tento passar pra date utilizando o SimpleDateFormat, o glassFish me dá o seguinte erro:

Grave: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: ‘Sat Oct 03 00:00:00 BRT 33’ for column ‘dataInicio’ at row 1.

Será que alguém pode ajudar?
Segue o código:

SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
                Date dataInicio = df.parse(request.getParameter("dataInicio"));
                Date dataFim = df.parse(request.getParameter("dataFim"));
                
                
                Curso curso = new Curso();
                curso.setDataInicio(dataInicio);
                curso.setDataFim(dataFim);                
                curso.setNomeInstrutor(request.getParameter("nomeInstrutor"));
                
                new CursoDAO().inserir(curso);

Ps: O padrão de data que o mysql recebe é: yyyy-mm-dd.

Oi Diego!

Como você está gravando os dados? Posta o método do DAO ae.

rsaraiva.

Aí vai:

 public void inserir(Curso curso) throws SQLException, ClassNotFoundException {
        Conexao.conexao();
        String sql = "insert into curso (dataInicio, dataFim, nomeInstrutor) values ('" + curso.getDataInicio() + "','" + curso.getDataFim() + "','" + curso.getNomeInstrutor() + "')";
        Conexao.stm.execute(sql);
    }

Abraço.

Só mais uma informação:

Os atributos dataInicio e datafim da classe Curso são do tipo Date.

Tenta assim:

        PreparedStatement statement = connection.prepareStatement("insert into curso(dataInicial, dataFinal) values(?,?)");
        statement.setDate(1, new java.sql.Date(dataInicio.getTime()));
        statement.setDate(2, new java.sql.Date(dataFim.getTime()));
        statement.executeUpdate();

A idéia é passar um tipo java.sql.Date criado a partir do seus dates.

Outra coisa, não é legal passar os parâmetros por contatenação na instrução sql, mas como está acima.

Abraço

Isso ae…

quando salva no bd usa o Date do pacote sql.
nao do util como estamos acostumados

abraz

Acho que não esta ocorrendo a transformação de java.util.Date para java.sql.Date.

Faça algo do tipo :


java.sql.Date dataInicioSql = new java.sql.Date(dataInicio.getTime());
java.sql.Date dataFimSql = new java.sql.Date(dataFim.getTime());

Use essas datas em sql e veja se da certo.

eu faria assim:

  SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
   try{
      data.setData(format.parse(jTextDate.getText());
   }catch(ParseException ex){
       ex.getMessage();
   }

//e lá no código no DAO eu faria assim:

Funcionario  funcionario = new Funcionario();

funcionario.setData(12/10/1997);

PreparedStatement smt = con.PreparedStatement(...);

try{
    smt.setDate(1, new java.sql.Date(funcionario.getData().getTime()));
}catch(Exception ex){
   ....
}

Valeu Galera, todas as dicas funcionaram aqui… só uma última dúvida, Quando for apresentar essas datas datas na jsp, preciso passar pra String de novo ou posso passar como Date mesmo?

Abraço!

Para exibir a data como “dd/MM/yyyy” acho que deve ser feito o seguinte:


<% SimpleDateFormat fmt = new SimpleSimpleFormat("dd/MM/yyyy"); %>

<%=fmt.format(data);%>

Veja se da certo, pq faz um tempo que não mexo com jsp.

Eu nunca tentei.

Realmente eu não sei.

Mas esse código não deveria estar dentro de um try…catch?