Data

Tenho uma classe Bean onde declaro:

private String dia;
private String mes;
private String ano;

e na minha outra classe DAO estou tentando fazer assim

Bean b = new Bean();

ps.setDate(b.getDia() + “/” + b.getMes() + “/” + b.getAno());
ps.executeUpdate();

Mas esta dando um erro…o q podera ser?

Que erro está ocorrendo ? você não tem que converter para String ?

ta dando esse erro:

“Cannot cast from String to Date”

O que é esse ps? E que metodo setDate() é esse?

E tambem não reinvente a roda, pra trabalhar com datas use java.util.Date

Esse ps é pq eu to usando:

PreparedStatement ps = null;
ps.setString(b.getNome());
ps.setInt(b.getCodigo());

Os metodos de preenchimento dos parametros do PreparedStatement recebem dois parametros, o primeiro é um int com o numero do parametro, o segundo é o valor de acordo com o tipo…

ex.:

ps.setString(1, b.getNome()); ps.setInt(2, b.getCodigo());

O setDate() recebe um objeto da classe java.sql.Date.

Como eu disse, trabalhe com objetos para datas, não com String.

para facilitar o raciocinio…

pegue os seus Strings dia, mes e ano e monte um objeto do tipo Date…talvez tenha uma forma mais simples mas ta aih…

Calendar dataC = new GregorianCalendar(); dataC.set(Integer.parseInt(ano), Integer.parseInt(mes)-1, Integer.parseInt(dia)); Date dataD = dataC.getTime();

claro q vc vai ter q fazer tratamento de erro disso, e tb verificar se seus String nao estao vazios, etc…

depois eh soh vc setar isso no seu ps…

ps.setDate(dataD);

espero ter ajudado…

valeu…

Olha o erro q ta dando:

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

Tentei fazer do jeito q vc disse…mas n pode importar a mesma classe como:

import java.util.Date;
import java.sql.Date;

pq o metodo .setDate usa o java.sql.Date…Como tenho q fazer?

public static boolean incluirCliente(CadastroBean cadastro) {
      
      Connection con = getConexao();
      PreparedStatement ps = null;      
      String sql = null;
      
      boolean sucesso = false;
      
      try {         

         sql = "INSERT INTO clientes VALUES (nextval('cod_cliente'), ?, ?, ?, ?, ?, ?, ?, ?, ?, "
            + " ?, ?, ?, ?, ?, ?, ?, ?)";
                     
         ps = con.prepareStatement(sql);
         ps.setString(1, cadastro.getNomeRazaoSocial());
         ps.setString(2, cadastro.getResponsavel());
         ps.setInt(3, cadastro.getTipoCliente());
         ps.setString(4, cadastro.getCpfCnpj());
         ps.setDate(5, (cadastro.getDia() + "-" + cadastro.getMes() + "-" + cadastro.getAno()));
         ps.setString(6, cadastro.getSexo());
         ps.setString(7, cadastro.getApelido());
         ps.setString(8, cadastro.getEmail());
         ps.setString(9, cadastro.getSenha());
         ps.setString(10, cadastro.getCep());
         ps.setString(11, cadastro.getEndereco());
         ps.setString(12, cadastro.getNumero());
         ps.setString(13, cadastro.getComplemento());
         ps.setString(14, cadastro.getBairro());
         ps.setString(15, cadastro.getFoneRes());
         ps.setString(16, cadastro.getFoneCel());
         ps.setString(17, cadastro.getFoneCom());
         ps.executeUpdate();
            
         return sucesso = true;            
      
      } catch ( SQLException se ) {
         
         System.out.println( "Erro: " + se.toString() );   
         se.printStackTrace();
                  
      } catch ( Exception e ) {
         
         System.out.println( "Erro: " + e.toString() );
         e.printStackTrace();
         
        } finally {
         
         fecharConexao( con, ps );
         
      } 
      
      return sucesso;
      
   }

Alguma sugestao de como resolver isso?

O problema é que vc tem que passar um objeto do tipo Date, e vc esta passando uma String.

ps.setDate(5, (cadastro.getDia()+"-"+cadastro.getMes()+"-"+cadastro.getAno()));

Se vc fizer o que nosso amigo pedrobusko sugeriu vai funcionar:

Calendar dataC = new GregorianCalendar(); dataC.set(Integer.parseInt(ano), Integer.parseInt(mes)-1, Integer.parseInt(dia)); Date dataD = dataC.getTime(); ps.setDate(5, dataD );
Ok??

Deu certo desse jeito…mas eu queria gravar somente a data no formato 2006/05/30…como tenho q fazer?

Alguma sugestao d como resolver isso? ja tentei d tudo…