Gravar Data no Postgresql

3 respostas
L

boa Tarde estou tentando gravar a Data no bamco mais não esta dando certo
Dao

public class ClienteDAO {
    private static PreparedStatement pstmt = null;
    private static ResultSet rs = null;
    
    public static boolean create(Cliente cliente) {
        try {
            cliente.setCodCliente(Conexao.getAutoInc("Cliente"));
            
            String dataNasc = cliente.getDataNasc();
            
            dataNasc = FormatUtils.formatDateJdbc(dataNasc);
            
            pstmt = Conexao.getConnection().prepareStatement(
                    "Insert Into Cliente(CodCliente, CodCidade, Nome, cpf, dataNasc, endereco, bairro, fone, email) " +
                    "Values(?,?,?,?,?,?,?,?,?)");
            pstmt.setInt(1, cliente.getCodCliente());
            pstmt.setInt(2, cliente.getCidade().getCodCidade());
            pstmt.setString(3, cliente.getNome());
            pstmt.setString(4, cliente.getCpf());
            pstmt.setString(5, dataNasc);
            pstmt.setString(6, cliente.getEndereco());
            pstmt.setString(7, cliente.getBairro());
            pstmt.setString(8, cliente.getFone());
            pstmt.setString(9, cliente.getEmail());
            pstmt.executeUpdate();
            pstmt.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

Tratamento

package controller;

import java.text.SimpleDateFormat;
import java.util.Date;

public class FormatUtils {
    
    public static void  main(String[] args){
        
        FormatUtils f = new FormatUtils();
        
        String data = "25/12/2007";
        String data1 = "12/25/2007";
        
        data = f.formatDateJdbc(data);
        
        data1 = f.formatDateUser(data1);
        
        System.out.println("Formato Banco " + data);
        
        System.out.println("Formato Usuario " + data);
        
    }
    
    public static String formatDateJdbc(String data){
        SimpleDateFormat f = new SimpleDateFormat("dd/mm/yyyy");
        Date d1 = null;
        try {
            d1 = f.parse(data);            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
        
        data = format.format(d1);
        
        return data;        
       
    }
    
    
    public static String formatDateUser(String data){
        SimpleDateFormat f = new SimpleDateFormat("yyyy-mm-dd");
        Date d1 = null;
        try {
            d1 = f.parse(data);            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        SimpleDateFormat format = new SimpleDateFormat("dd/mm/yyyy");
        
        data = format.format(d1);
        
        return data;       
        
    }

Ele não consegue salvar desta forma informando como data invalida

3 Respostas

F

Labavel, é o seguinte:

na classe formatadora que vc criu, vc importou java.util.Date, ou seja, quando declara Date varData… esta varData é do tipo util; logo, para gravar no banco vc deve converter para java.sql.Date.

Tente fazer assim, dará certo.

F

Segue um exemplo desta formatação:

public java.sql.Date converteDataUtilToSql(Date data) {

        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");

        Date dataUtil = data;
        java.sql.Date dataSql = null;

        try {
            dataUtil = new java.sql.Date(dataUtil.getTime());
            dataSql = (java.sql.Date) dataUtil;

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro ao converte data para sql: " + e.getMessage());
        }


        return dataSql;
    }

Este exemplo, ele faz a conversão de uma data java.date.util, e não de String diretamente. No caso, so adaptar ou fazer a conversão de String - date.util primeiro.

Dê seu retorno.

R

Passe um objeto do tipo java.sql.Date, convertendo a data que existe no seu objeto cliente (que é do tipo java.util.Date).

//estou levando em consideração que o métoto cliente.getDataNasc(); retorna um objeto do tipo java.util.Date
java.sql.Date dataSQL = new Date(cliente.getDataNasc().getTime());

pstmt.setDate(5, dataSQL);

Tente aí qualquer dúvida estamos aí pra tentar ajudar.

Criado 19 de março de 2010
Ultima resposta 19 de mar. de 2010
Respostas 3
Participantes 3