String para tipo date

4 respostas
N

Bom dia,

Estou fazendo um código para poder colocar em prática a teoria dos livros, e estou com um problema na transformação da data para poder guardá-la no banco de dados.

Eu tenho a data atual: 13/12/2011 em um jtextfield, quando uso o .getText(); e tento inciailizar uma váriavel do tipo data com a string, me retorna um valor do tipo americano, Tue Dec...

Então, olhando alguns posts aqui, e lendo a API, vi sobre o SimpleDateFormate e também o DateFormatter.
Então, gerei um código:

public void cadastrarEntidade(Entidade e1)
     {
          try {
         Statement status = c.conectar();
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");  
        java.sql.Date data = new java.sql.Date(format.parse(e1.getData_cadastro()).getTime());  
        String sql = new String("INSERT INTO especialidade(Codigo, CNPJ, Razao_cial, Nome_fantasia, Sigla, Porte_Instituicao, Categoria_Adm, Setor, Site, Data_cadastro, Rua, Numero, Complemento, Bairro, CEP, Cidade, UF, Telefone, Email)"
     + " VALUES('"+e1.getCodigo()+"','"+e1.getCNPJ()+"','"+e1.getRazaoSocial()+"','"+e1.getNome()+"','"+e1.getSigla()+"','"+e1.getPorte()+"','"+e1.getCategoria_adm()+"','"+e1.getSetor()+"','"+e1.getSite()+"','"+data+"','" + e1.getRua() + "','" + e1.getNumero() + "','" + e1.getComplemento()+ "','" + e1.getBairro()+ "','"+ e1.getCep()+ "','"
     + e1.getCidade()+ "','"+ e1.getUF()+ "','" + e1.getTelefone()+ "','" + e1.getEmail()+ "');");
         System.out.println(sql);
       
              status.executeUpdate(sql);
            
            
        }
        catch(ParseException ex)
        {
            System.out.println("parse exception no executar entidade");
        }
        catch(SQLIntegrityConstraintViolationException ex)
        {
            JOptionPane.showMessageDialog(null, "Já existe uma entidade com este CNPJ.");
        }   
        catch (SQLException ex) {
            System.out.println("exceção lançada no executarEntidade, cadastrarEntidade, sqlexception");
        }
        finally{
            c.fechaConexaoBD();
        }
     }

Porém, esta lançando uma exceção sqlexception, para me ajudar a descobrir o erro, fiz uma saída, que retornou:

INSERT INTO especialidade(Codigo, CNPJ, Razao_cial, Nome_fantasia, Sigla, Porte_Instituicao, Categoria_Adm, Setor, Site, Data_cadastro, Rua, Numero, Complemento, Bairro, CEP, Cidade, UF, Telefone, Email) VALUES('1','3','','','','Pequena','ONG','','','2011-12-13','','3','','','33333333','','AC','[telefone removido]','');

Estou fazendo o código do SimpleDateFormatter errado ou é em outro lugar?

4 Respostas

drsmachado

1 - Esqueça isso

String sql = new String("INSERT INTO especialidade(Codigo, CNPJ, Razao_cial, Nome_fantasia, Sigla, Porte_Instituicao, Categoria_Adm, Setor, Site, Data_cadastro, Rua, Numero, Complemento, Bairro, CEP, Cidade, UF, Telefone, Email)"   
    + " VALUES('"+e1.getCodigo()+"','"+e1.getCNPJ()+"','"+e1.getRazaoSocial()+"','"+e1.getNome()+"','"+e1.getSigla()+"','"+e1.getPorte()+"','"+e1.getCategoria_adm()+"','"+e1.getSetor()+"','"+e1.getSite()+"','"+data+"','" + e1.getRua() + "','" + e1.getNumero() + "','" + e1.getComplemento()+ "','" + e1.getBairro()+ "','"+ e1.getCep()+ "','"   
    + e1.getCidade()+ "','"+ e1.getUF()+ "','" + e1.getTelefone()+ "','" + e1.getEmail()+ "');");

Experimente o poder do PreparedStatement

StringBuffer query = new StringBuffer();
query.append("INSERT ");
query.append("INTO ");
query.append("especialidade ");
query.append("(Codigo, ");
query.append("CNPJ, ");
query.append("Razao_cial, ");
query.append("Nome_fantasia, ");
query.append("Sigla, ");
query.append("Porte_Instituicao, ");
query.append("Categoria_Adm, ");
query.append("Setor, ");
query.append("Site, ");
query.append("Data_cadastro, ");
query.append("Rua, ");
query.append("Numero, ");
query.append("Complemento, ");
query.append("Bairro, ");
query.append("CEP, ");
query.append("Cidade, ");
query.append("UF, ");
query.append("Telefone, ");
query.append("Email) ");
query.append("VALUES ");
query.append("(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
 PreparedStatement ps = con.prepareStatement(query.toString());
 ps.setInt(1, e1.getCodigo());
 ps.setString(2, e1.getCNPJ());
 //assim para cada campo
 //depois
 ps.executeUpdate();

Bem mais limpo, não?

Segundo, ocorre um sqlexception, mas qual?

F

Amigo te recomento formentemente ler a especificaçao do banco de dados que esta utilizando, pois dependendo do banco não é possivel fazer a conversao direta do tipo date java para o tipo date do seu banco de dados… para resolver as linguagens sql possuem uma funçao para fazer essa conversao… em oracle por exemplo existe a funçao to_date que recebe uma string e tenta converte para um tipo date.

drsmachado

Camarada, ele não está forçando a conversão diretamente no banco de dados.

new java.sql.Date(format.parse(e1.getData_cadastro()).getTime());

Ele primeiro converte e depois cria a query.

N

Boa tarde,

Bom, o erro foi solucionado, e se eu tivesse um código limpo igual o drsmachado tinha mostrado, eu teria achado com mais rapidez.

O erro era na disposição dos elementos durante o INSERT INTO, e o código de date esta correto.

Obrigado a todos, e estou lendo mais o livro do Navathe e o Java como programar, da Deitel, pra ver se aprendo um pouco mais.

Criado 13 de dezembro de 2011
Ultima resposta 13 de dez. de 2011
Respostas 4
Participantes 3