Campo data, (dá uma força ia galera)

Olá pessoal.

Estou com este problema, pego a data atual da máquina e tento gravar num capo data, mas o valor do campo fica totalmente diferente.

[code]Date hoje = new Date();
SimpleDateFormat formataData = new SimpleDateFormat(“yyyy/MM/dd”);
String hojeString = formataData.format(hoje);

psqSql = “update CLIENTES set NOME = '” + txtNome.getText() +
"’, SALARIO = " + Double.parseDouble(vlrSalario) +
“, NASCIMENTO = " + hojeString +
" where cpfcgc = '” + txtCodigo.getText() + “’”;[/code]

Dá uma força ai galera.

[]…
GuttoSP

Qual o formato do campo data que esta definido na estrutura do banco? isso eh muito importante, pois diferentes bancos gravam as datas de diferents maneiras, e voce precisa passar os dados exatametne como ele espera que sejam.
Verifique isso.

Rafael

O bd é Access.

Use o PreparedStatement… Ele vai facilitar pra voce… POis ele “ajeita” os tipos de dados na Query de acordo com o Driver do Banco que voce está usando.

Ex…

String SQL = “update CLIENTES set NOME = ? , SALARIO = ? , NASCIMENTO = ? where cpfcgc = ?”;

PreparedStatemet pStmt = connection.prepareStatement( SQL );
pStmt.setString(1, txtNome.getText() );
pStmt.setDouble(2, new Double( vlrSalario );
pStmt.setDate(3, new Date() );
pStmt.setString(4, txtCodigo.getText() );
int row = pStmt.executeUpdate();
pStmt.close();
connection.close();

Bom estudo.

O PreparedStatement resolve mesmo!!

o chato do PreparedStatement é que vc tem que passar um java.sql.Date pra ele e não um java.util.Date. Mas vale o preço…

Quando vc faz queries diretamente com Strings, vc pode fazer assim:

java.util.Date myDate = ...
java.sql.Date sqld = new java.sql.Date(myDate);
StringBuffer buf = new StringBuffer("UPDATE clientes SET nome = ");
...
buf.append(" nascimento = '");
buf.append(sqld.toString()); // explícito, mas podia ser buf.append(sqld);
buf.append("' WHERE");
...

No seu código, faltou isso: o apóstrofo em volta da data. Vc tb pode usar o formato “yyyy-MM-dd”, que é o formado do java.sql.Date.

No caso especial do Oracle, eu já vi um fenômeno estranho com PreparedStatements e java.sql.TimeStamps: a gente tinha que zerar os nanossegundos de todos os timestamps antes de gravar no banco, senão não dava pra testar a igualdade de jeito nenhum:

  stamp.setNanos(0);

Isso é estranho pq o Oracle afirma ignorar os nanossegundos, pelo menos no help online.