Problema com campo Date

7 respostas
B

Pessoal, minha duvida é a seguinte:

Estou trabalhando com o banco de dados postgresql e java.
Tem uma tabela com campo date.

No Form um jXDatePicker para facilitar para o usuario.

Afinal, uso Java.util.Date ou java.sql.date como tipo no DAO?

Ja tentei os dois mas nao deu certo.

Nao quero nenhuma soluçao pronta, mas procuro saber o que devo fazer (qual o jeito certo de resolver isso)

Meu codigo esta abaixo:

public void adiciona(Atendimento at) throws SQLException{
        String sql = "insert into atendimento (atd_data, atd_pago, atd_obs, tipo_atendimento, paciente_pac_codigo, atd_valor) "+
                                  "values(?, ?, ?, ?, ?, ?)";
   
        
        PreparedStatement stmt = conexao.prepareStatement(sql);
        
        stmt.setDate(1, at.getAtd_data()); // Essa linha sempre fica sublinhado o setDate
        stmt.setInt(2, at.getAtd_pago());
        stmt.setString(3, at.getAtd_obs());
        stmt.setInt(4, at.getTipo_atendimento());
        stmt.setInt(5, at.getPaciente_pac_codigo());
        stmt.setDouble(6, at.getAtd_valor());
        
        //System.out.println(stmt);
        stmt.execute();
        stmt.close();
    }
    

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            int combo;
            // TODO add your handling code here:


            String dataBanco = jXDatePicker1.getDate().toString();

            Atendimento atendimento = new Atendimento();
            atendimento.setAtd_data(formDataStrgToJava(dataBanco));
            atendimento.setAtd_obs(jTextObs.getText());
            atendimento.setAtd_valor(Double.parseDouble(jValor.getText()));
            atendimento.setPaciente_pac_codigo(codigo_paciente);


            AtendimentoDao ADao = new AtendimentoDao();
            ADao.adiciona(atendimento);
        } catch (SQLException ex) {
            Logger.getLogger(FormAtendimento.class.getName()).log(Level.SEVERE, null, ex);
        }

    }                                        
    

   public java.sql.Date formDataStrgToJava(String data){  
            /* Função de conversão de uma data do tipo STRING dd-MM-yyyy para formato 
             * date do java.util 
             */          
            DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");//Formato da data que virá do banco  
            Date date = null;    
            try {  
                date = (Date) formatter.parse(data);//convertendo o formato para Date  
            } catch (ParseException ex) {  
               System.out.println(ex);  
           }  
           return (java.sql.Date) date;  
       }

7 Respostas

R

Dá algum erro?

B

Nao compila, no codigo stmt.setDate() diz que nao pode encontrar o campo java.ultil.date
Ja tentei importar ele mas mesmo assim o erro persiste.

Gostaria de saber como vcs usam o campo date quando vao fazer um sistema e que tipo declaram.

Tchello

Se você olhar na documentação:

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/PreparedStatement.html

Notará que o método setDate recebe um java.sql.Date, nao um java.util.Date.

Você pode fazer assim:

stmt.setDate(1, new java.sql.Date(at.getAtd_data().getTime()));

B

Valeu fera, vou testar depois do trabalho e qquer coisa posto se deu certo ou não.

Falou

eliangela

betocamargo:
Nao compila, no codigo stmt.setDate() diz que nao pode encontrar o campo java.ultil.date
Ja tentei importar ele mas mesmo assim o erro persiste.

Gostaria de saber como vcs usam o campo date quando vao fazer um sistema e que tipo declaram.

o pacote java.ultil.date não exite mesmo, existe java.util.Date.
outra coisa, o método setDate() da classe PreparedStatement tem como parâmetro um java.sql.Date.
Tenta fazer assim:

stmt.setDate(1, new java.sql.Date(2010, 02, 11));

espero ter ajudado

Tchello

eliangela:
betocamargo:
Nao compila, no codigo stmt.setDate() diz que nao pode encontrar o campo java.ultil.date
Ja tentei importar ele mas mesmo assim o erro persiste.

Gostaria de saber como vcs usam o campo date quando vao fazer um sistema e que tipo declaram.

o pacote java.ultil.date não exite mesmo, existe java.util.Date.
outra coisa, o método setDate() da classe PreparedStatement tem como parâmetro um java.sql.Date.
Tenta fazer assim:

stmt.setDate(1, new java.sql.Date(2010, 02, 11));

espero ter ajudado


Sim, mas esse construtor da java.sql.Date é deprecated, portanto creio que seja melhor a solução que apresentei anteriormente.

sergiotaborda

betocamargo:
Pessoal, minha duvida é a seguinte:

Estou trabalhando com o banco de dados postgresql e java.
Tem uma tabela com campo date.

No Form um jXDatePicker para facilitar para o usuario.

Afinal, uso Java.util.Date ou java.sql.date como tipo no DAO?

A API JDBC trabalha com java.sql.Date. Veja que o ‘sql’ no pacote significa : “para usar com banco de dados”.
E entenda tb que esta classe herdade java.util.Date. A diferença é que util.Date contem os dados completos do instante, hora, data, fuso horario,etc…
sql.Date contém apenas a data.

Portanto, quando vc grave e le do banco vc deve usar java.sql.Date, java.sql.Time ou java.sql.Timestamp conforme vc quer guardar só a data, só a hora, ou ambos.

Se o seu dado está em um java.util.Date, vc precisa converter assim:

java.util.Date date = ... // o valor que vc tem vindo do resto do sistema
java.sql.Date dbDate = new java.sql.Date(date.getTime());

Nunca use strings para transportar informações de data. NUNCA!
E já agora, tb não use java.util.Calendar.

Criado 10 de fevereiro de 2010
Ultima resposta 11 de fev. de 2010
Respostas 7
Participantes 5