setDate

boa tarde eu estou seguindo uma apostila da caelum mais fui mudando um pouco para aprender mais e aqui tenhu um erro

	stmt.setDate(2, contatosDTO.getData());

ele não aceita eu por o setDate… mais os campos setStrind ele aceita de boa… alguem pode me ajudar???

vlww…

De que tipo é o objeto stmt?

Se for um classe que vc criou, coloca a definição dela aí

[code]public boolean inserir(ContatosDTO contatosDTO){
try{
Connection con = Conexao.getConnection();
PreparedStatement stmt = con.prepareStatement(“Insert into contatos” +
“(nome, data, endereco) values(?,?,?)”);

		stmt.setString(1, contatosDTO.getNome());			
		stmt.setDate(2, contatosDTO.getData());			
		stmt.setString(3, contatosDTO.getEndereco());
		
		stmt.execute();
		stmt.close();
		System.out.println("Gravado com sucesso!");
		con.close();
		return true;
		
	}catch (SQLException e){
		e.printStackTrace();
		return false;
	}
}

[/code]

é isso aqui… os String da certo mais o setDate nem o.O

Passe a data para String com SimpleDateFormat

Na sua classe ContatosDTO o tipo do retorno do metodo getData é java.util.Date?

O erro que ta dando é de compilação ou de execução?

Pq se for de compilação… tem algo muito doido aí…

Eu uso o setDate do PS tranquilo…

é erro de compilação o.O

cara e la na mnha classe ContatosDTO é java.util.Date sim
o.O

[quote=Naruto]é erro de compilação o.O

cara e la na mnha classe ContatosDTO é java.util.Date sim
o.O
[/quote]

So para testar… no lugar de colocar o seu metodo getData, da uma new Date()… so para testar…

mesma coisa rsrrsso o.O deixa eu evr o erro

O metodo setDate(int, Date) in the type PreparedStatement in not aplicable for the arguments (int, Date)

Atenção para a pegadinha, é tão maldosa que poderiam cobrar numa certificação:

O setDate do PreparedStatement aceita um java.sql.Date e não um java.util.Date.
O java.sql.Date é filho de java.util.Date.

Faça, então:

stmt.setDate(2, new java.sql.Date(contatosDTO.getData().getTime()));

nussss deu certo mais eu tinha importado o java.sql.Date mais mesmo assim num dava ai vc fez isso ai deu certo :smiley:
vlwww

Faz isso:

stmt.setDate(2, new java.sql.Date( contatosDTO.getData().getTime() ) );

Vendo o doc da API do JDBC o parametro do setDate é java.sql.Date e nao java.util.Date. o java.sql.Date herda de java.util.Date

Deve funcionar

[quote=ViniGodoy]Atenção para a pegadinha, é tão maldosa que poderiam cobrar numa certificação:

O setDate do PreparedStatement aceita um java.sql.Date e não um java.util.Date.
O java.sql.Date é filho de java.util.Date.

Faça, então:

stmt.setDate(2, new java.sql.Date(contatosDTO.getData().getTime()));

Opa… nem deu tempo de ver o seu post… parece até q eu copiei e colei… rsrsrs

Pegadinha mesmo…

sim sim ja funciono o.o mais porque so importado não dava certo??

[quote=Naruto]sim sim ja funciono o.o mais porque so importado não dava certo??
[/quote]

Porque o tipo do retorno do getData é java.util.Date… e o parametro do PS setDate é java.sql.Date.

Então, sao tipos diferentes…

Se fosse ao contrário, o parametro esperado fosse java.util.Date e vc estivesse passando java.sql.Date, aí sim daria certo, porque java.sql.Date herda de java.util.Date.

Deu para entender ou eu so compliquei a situação?

Resumindo, a herança é um caminho de mao unica. Quando vc espera receber um parametro do tipo de uma classe Filha, a classe pai não será aceita… mas, se vc estiver esperando um parametro do tipo da classe pai e receber um filho, aí da certo.

sim sim entendi heheheh :smiley:
vlwww caraa

Olá galera eu tava com o mesmo problema do nosso colega NARUTO no entanto ele foi grassas aos posts de vcs, só que quando importei java.sql.Date o contrutor vazio da minha classe deu problema que segue:

public Entidade() {
this.identidade = 0;
this.nome_entidade = “”;
this.nome_fantasia = “”;
this.tipo_pessoa = “”;
this.data_nascimento = new Date();
}

na linha negritada ele ta exigindo um parametro que não sei qual devo colocar, se alguem puder me ajudar