Problema com Date

11 respostas
J

Boa tarde , estou com uma dúvida quanto ao alterar uma tarefa .

Eu não consigo trabalhar de forma alguma com campos com data .

Eu não consigo nem faze compilar.. : /

~

    public void altera(Tarefa tarefa){
  		
  		String sql = "update tab_tar set descricao=?, finalizado=?, dataFinalizacao=?  where id=?";
  		
  		try {
  			PreparedStatement stmt = connection.prepareStatement(sql);
  			stmt.setLong(1, tarefa.getId());
  			stmt.setString(2,tarefa.getDescricao() );
  			stmt.setString(3, tarefa.getFinalizado());
  			
  		    
  			stmt.setDate(3, tarefa.getDataFinalizacao());
  			
  			stmt.execute();
  			stmt.close();
  			
  		} catch (SQLException e) {
  			throw new RuntimeException(e);
  		}
  	}

O erro está aqui : stmt.setDate(3, tarefa.getDataFinalizacao());

o campo dataFinalizacao é um Calendar.

Eu já tentei da um setCalendar , mais ele fala para eu dar um cast , eu dou , porém não arruma nada ...

Alguém sabe alguma forma ? Por favor ?

11 Respostas

yhhik

que erro está dando?
veja seu import o parametro do setDate é java.sql.Date, existe o java.util.Date.

J

Ele não chega a dar erro , porque eu não consigo nem compilar , fica sublinhado de vermelho .

The method setDate(int, Date) in the type PreparedStatement is not applicable for the arguments (int, Calendar)

yhhik

o setDate não possui argumentos válidos para os tipos que você informou.

pelo que o erro diz você está passando um objeto da classe java.util.Calendar, sendo que o método espera um objeto da classe java.sql.Date.

J

Isso mesmo , como eu disse no primeiro tópico .A minha classe tarefa tem o campo dataFinalizacao com Calendar.

porém eu já tentei passar como calendar . Olha o que acontece :

stmt.setCalendar(3, tarefa.getDataFinalizacao());

The method setCalendar(int, Calendar) is undefined for the type PreparedStatement

Bom ele fala pra eu fazer um cast então fica assim :

((Object) stmt).setCalendar(3, tarefa.getDataFinalizacao());

Porém gera outro erro :

The method setCalendar(int, Calendar) is undefined for the type Object

eu não sei o que eu faço !!

yhhik

então amigo…
como eu disse antes vc esta tentando passar um calendar para um date…
o que vc deve fazer é converter esse calander para date.
existe o metodo getTime() da classe Calendar, que retorna um Date.

J

Então , obrigado pela resposta.

O problema é que estou com muita dúvida ao fazer essa conversão .

Seria mais ou menos assim ?

stmt.setDate(4, (Date) tarefa.getDataFinalizacao().getTime());

Obrigado !

yhhik

de uma olhada
http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

J

Obrigado !

Agora deu para compilar porém gerou outro erro :confused:

java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

Eu já dei uma pesquisada é algo sobre o util.Date não é a mesma coisa que o sql.Date .

Porém eu não sei ,e não consegui acha exemplos que funcionem para essa conversão .

Alguém sabe ?

OBS : está assim .

stmt.setDate(4, (Date) tarefa.getDataFinalizacao().getTime());

Eu pesquisei e tentei fazer assim :

tmt.setDate(4, new java.sql.Date(tarefa.getDataFinalizacao().getTime()));

porém fala que o construtor Date is undefinied.

J

UP UP UP

J

UP UP UP

alguém por favor…

Diguinho.Max

Bom amigo pelo que vi do erro é que você está trabalhando com dois tipos de Date um é da biblioteca java.util e o outro é da java.Sql.Date modifique as duas para java.util então nao é possivel fazer um cast com tipos diferentes de data, por isso da está exception.

espero ter ajudado abraço.

Criado 29 de outubro de 2011
Ultima resposta 31 de out. de 2011
Respostas 11
Participantes 3