Problema no SimpleDateFormat[RESOLVIDO]

10 respostas
D

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.

10 Respostas

rsaraiva

Oi Diego!

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

D

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.

D

Só mais uma informação:

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

rsaraiva

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

d34d_d3v1l

Isso ae…

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

abraz

DoomGuy

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.

marcoslogan

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){
   ....
}
D

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!

DoomGuy

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.

marcoslogan

Eu nunca tentei.

Realmente eu não sei.

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

Criado 28 de abril de 2012
Ultima resposta 5 de mai. de 2012
Respostas 10
Participantes 5