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

4 respostas
G

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.

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() + "'";

Dá uma força ai galera.

[]...
GuttoSP

4 Respostas

Rafael_Steil

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

G

O bd é Access.

ozielneto

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.

dukejeffrie

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.

Criado 31 de março de 2003
Ultima resposta 1 de abr. de 2003
Respostas 4
Participantes 4