Problema com campo Date

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:

[code]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;
} [/code]

Dá algum erro?

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.

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()));

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

Falou

[quote=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.

[/quote]

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

[quote=eliangela][quote=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.

[/quote]

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[/quote]
Sim, mas esse construtor da java.sql.Date é deprecated, portanto creio que seja melhor a solução que apresentei anteriormente.

[quote=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?
[/quote]

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.