Converter String em data.sql.date

6 respostas
java
E

Pessoal o método abaixo faz a leitura de arquivo txt onde pega os campos separados por (:wink:
e carrega o meu objeto (objServidor) para então gravar no banco de dados.
Ocorre que o campo que recebe a datainiexercicio (01/05/2018) por exemplo não esta rodando.
Usei um metodo que formata a string e converte em data pois no objeto ela é uma data do tipo
java.sql.Date. O método é o formatarData que retorna uma data.sql.date que deixei mais abaixo para verificação de o porque
não esta aceitando esta data. Testei os outros campos e esta tudo funcionando menos a data.
O meu banco de dados é o Firebidr 2.1 e o campo data esta como Date.
Segue exemplo de uma linha o txt

MIQUEIAS DA SILVA NORE;6964443;1;56;1;6;2;03/10/2000;ATIVO;*

Quem puder ajudar agradeço.

private void ImportarTXT(){

//inicializando as variaveis dos campos a serem gravados

int totalLinhas                         = 0;

RetornarQdeLinhasDoTxt qdeLinhas        = new RetornarQdeLinhasDoTxt();
//setando o caminho do arquivo TXT no edit do formulario apenas para mostrar o arquivo que esta sendo importado
    SelecionarArquivoTexto select = new SelecionarArquivoTexto();  
    caminhoTXT = select.ImportarTXT();   
    
    if(caminhoTXT != null)
    {
         //setando o caminho do arquivo TXT na variavel caminhoTXT para pegar os valores                   
         txtARQUIVO.setText(caminhoTXT);
         totalLinhas  = qdeLinhas.retornaNumLinhasDoTxt(caminhoTXT);
         //JOptionPane.showMessageDialog(null, "Qde de linhas do arquivo...: "+String.valueOf(totalLinhas));
                    
    
            //criando uma variavel arquivo do tipo File e setando o caminho do arquivo TXT nela
            File arquivo = new File(caminhoTXT);        
            try {
                FileReader ler          = new FileReader(arquivo);
                BufferedReader lerBuf   = new BufferedReader(ler);
                linha                   = lerBuf.readLine();

                while(linha != null)
                {
                    nome                = linha.split(";")[0];
                    rf                  = linha.split(";")[1];
                    svinculo            = linha.split(";")[2];
                    cargobase           = linha.split(";")[3];
                    departamento        = linha.split(";")[4];
                    unidade             = linha.split(";")[5];
                    tiposervidor        = linha.split(";")[6];
                    datainiexercicio    = linha.split(";")[7];
                    status              = linha.split(";")[8];
                    obs                 = linha.split(";")[9];
                  
                  
                    //setando os valores no objeto do modelo
                    objServidor.setNome(nome);
                    objServidor.setRf(rf);
                    objServidor.setVinculo(Integer.parseInt(svinculo));
                    objServidor.setCargobase(Integer.parseInt(cargobase));
                    objServidor.setDepartamento(Integer.parseInt(departamento));
                    objServidor.setUnidade(Integer.parseInt(unidade));
                    objServidor.setTiposervidor(Integer.parseInt(tiposervidor));
                    
                    ==========================================================================
		objServidor.setDtinicioexercicio(umMetodo.formatarData(datainiexercicio));
                    ==========================================================================

                    objServidor.setStatus(status);
                    objServidor.setObs("");

                    //gravando no banco de dados, antes verifica se o rf já esta cadastrado e não grava se isso acontecer
                    if(umMetodo.duplicidadeDeCadastro("TBLSERVIDORES", "rf", rf)){
                        //JOptionPane.showMessageDialog(null,"O ServidorComCargo "+nome+" já esta cadastrado!");
                         contador = 0;
                    }else{
                        if (ctrlServidor.salvarServidor(objServidor)){
                            contador = 1;
                        }                            
                    }

                    //lendo a proxima linha
                    linha = lerBuf.readLine();    

                 }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,"Erro ao tentar ler o arquivo!");
            }
            if (contador > 0){
                JOptionPane.showMessageDialog(null,"Os dados foram importados com sucesso!");                   
            }else if (contador == 0){
                JOptionPane.showMessageDialog(null,"Nenhum registro foi cadastrado com sucesso!","Atenção possíveis erros de leitura ou duplicidades!",2);
            } 
    }        
     contador = 0;
}
public Date formatarData(String data) throws Exception

{

if (data == null || data.equals(""))

return null;

Date date = null;

try {

DateFormat formatter = new SimpleDateFormat(dd/MM/yyyy);

date = (Date)(java.util.Date)formatter.parse(data);

} catch (ParseException e) {

throw e;

}

return date;

}

6 Respostas

V

@edsouzza Boa noite amigo, você pode fazer o seguinte:

{

try{
           SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
           Date dt = sdf.parse("01/05/2018");
   } catch (Exception ex) {
           ex.printStackTrace();
   }

}

V

@edsouzza

Fiz uma modificações no código…não tinha visto que você já fazia a conversão.

E

Boa noite, obrigado pela atenção.
Bem gerou este erro:
java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

V

Basta trocar a importação da biblioteca :slight_smile:

{

//essa deve ser a importação que você fez na classe que utiliza o retorno
 import java.sql.Date;
 //coloque esta no lugar dela
 import java.util.Date;

}

E

Ok. passou mas agora no meu banco de dados esta dando erro que java.util.date nao pode ser convertido para java.date.sql

Na minha classe model eu defini os campos abaixo para receber
java.util.Date

Mas quando tento gravar me parece que esta linha
pst.setDate(8, pServidor.getDtinicioexercicio());
esta esperando um java.sql.Date, ai nao da certo porque estou passando um java.util.date

public Date getDtinicioexercicio() {

return dtinicioexercicio;

}
public void setDtinicioexercicio(Date dtinicioexercicio) {
    this.dtinicioexercicio = dtinicioexercicio;
}
V

Normalmente não é necessário fazer esse tipo de conversão, pode ter algo no seu código que está provocando isto, mas eu não seu o que pode ser, então vou te passar algo diferente.

{

public void setDtinicioexecicio(Date dtinicioexercicio){
             this.dtinicioexercicio = new java.sql.Date(dtinicioexercicio.getTime());
   }

}

Ainda acho que são os pacotes importas dentro das suas classes.

Criado 1 de maio de 2018
Ultima resposta 1 de mai. de 2018
Respostas 6
Participantes 2