Nel, obrigado por se preocupar em me ajudar, mas sou iniciante, não entendi direito oq quis me ensinar, vc poderia me dar um exemplo?
abraços
Nel, obrigado por se preocupar em me ajudar, mas sou iniciante, não entendi direito oq quis me ensinar, vc poderia me dar um exemplo?
abraços
vou dar um exemplo:
tenho uma tabela chamada data
com coluna id - nome - data
e os seguintes dados:
1d = 1 nome = leandro data = 1981-12-29
se eu fizer um select * from data where data = ‘1981-12-29’ irá funcionar correto???
porem quando migrei pro novo sistema operacional a data cadastrada no banco ficou:
1d = 1 nome = leandro data = 1981-29-12 este select então iria retornar null certo? queria corrigir isto no banco.
não vai retornar null pelo simples fato de que a query não seria compilada. Não conseguiria gerar uma data ‘12 do mês 29’ porque não existe mês 29. O máximo que o java faria quando você usa o setDate para definir uma data em uma query, seria
WHERE data = STR_TO_DATE('1981-12-29 ','%Y-%m-%d');
Isso aqui dificilmente dará algum erro como você diz.
select c.,m.,p.* from contato c inner join mensalidade m inner join pgto p where c.matricula = ? and p.dataPagamento= STR_TO_DATE( ? ,’%Y-%m-%d’) and c.idcontato = m.idcontato and m.idmensalidade = p.idmensalidade and m.pago = 1 group by p.idmensalidade,p.idpgto order by c.matricula,m.ano,m.mesref ASC
sera que isso funcionaria? ainda nao estou em casa para testar…
evefuji
o select ta corretissimo, informa a data no formato 1981-12-29
poreeeeem no banco esta aparecendo 1981-29-12 AAAA-mm-dd por isso retorna null, nao lista nada, pq meu select procura por uma data e no banco ta outra
mouzer, isso só funcionaria se você estivesse enviando o parâmetro como String, não como java.util.Date. Quando você envia java.util.Date ele já “define” o formato. O driver jdbc do mysql já faz esse tipo de tratamento.
Segundo os padrões do MySQL, o formato [color=blue]YYYY-MM-DD[/color] é padrão e não pode ser alterado.
Veja:[quote]The format of a DATE value is ‘YYYY-MM-DD’. According to standard SQL, no other format is permitted. You should use this format in UPDATE expressions and in the WHERE clause of SELECT statements. For example:[/quote]FONTE: http://dev.mysql.com/doc/refman/5.6/en/using-date.html
Abraço!
Assim que chegar em casa, eu ligo o servidor, tiro um print e posto para voces olharem como está no banco.
fiz um pagamento hoje e esta: 2012-03-01
O Meu MYSql quando pega do BD também pega no formato YYYY-DD-MM. Usa um SimpleDateFormat
Como você está acessando essa informação do banco?
Acredito que seja um conflito entre seu SO e seu servidor SQL.
Veja se as configurações de ambos estão batendo legal.
como assim danilovicente??
vc viu ai minha query sql?
daria um exemplo?
[quote=mouzer]como assim danilovicente??
vc viu ai minha query sql?
daria um exemplo?[/quote]
Estou saindo do trabalho, chegando em casa eu entro e te mando um exemplo.
@Vingdel, o formato é padrão SQL ANSI, o MySQL segue esse padrão mas não estritamente. Muitas das funções do MySQL não seguem o SQL ANSI, o maior exemplo é a falta do full join. É muito comum mudar de acordo com o locale. Mas o mais provável nesse caso é que o mouzer esteja usando o PHPMyAdmin e ele esteja mostrando o formato que o PHPMyAdmin está configurado.
@Mouzer: tenta fazer a consulta direto no seu cliente SQL. Depois mostra se conseguiu o resultado e a gente te sugere como fazer isso no java.
Então pode ser isso mesmo, configuração da aplicação que está usando para visualizar os dados do banco, no caso dele é o MySQL Query Browser.
Isso se confirma se fizer uma consulta pelo próprio MySQL.
Vamos ver o que ele e diz.
Até mais!
Amigos… Se eu fizer uma consulta no formato correto ex: select * from data where data = ‘2012-01-03’ ira retornar zero registro pq no banco de dados inexplicavelmente todos os registros estão aparecendo assim: 2012-03-01 já fiz este teste
Sim mouzer, mas vc ta fazendo a consulta pelo MySQL Query Browser ou pelo console?
eu fiz pelo console e pelo query browser…
ja to ate desistindo, nao acho nada parecido na internet
mouzer, faz o seguinte, antes de executar a consulta, faz um System.out.println(preparedStatement.toString()); E coloca aqui o que ele imprime no console certo?
o driver jdbc não depende do formato da data na base de dados.
Podes, por favor, postar o modo como persiste a data no banco de dados?
O método que faz a persistência das informações na tabela que está realizando a consulta, por favor.
Poste-o completo. Uma observação, o formato da data salva no banco independe do S.O que utiliza, se executa de uma forma, ela sempre será salva daquela forma.
O seu banco não iria alterar o formato dela, a não ser que tu altere isso nas configurações do seu banco de forma implícita, por padrão, é exatamente a mesma.
No aguardo.
Mouzer
Desculpe não consegui entrar ontem mas segue a lógica que eu usei nesse código. É bem simples. Qualquer dúvida me chama aê.
[code]import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
public class Teste {
public Teste() {
String data = "2012-03-01";
SimpleDateFormat formata = new SimpleDateFormat("yyyy-dd-MM");
SimpleDateFormat converte = new SimpleDateFormat("dd/MM/yyyy");
Date date = new GregorianCalendar().getTime();
System.out.println("Formatada: "+date+" Convertida: "+converte.format(date));
try{
date = formata.parse(data);
System.out.println("Entrada: "+data+" Formatada: "+date+" Convertida: "+converte.format(date));
}catch(ParseException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
new Teste();
}
[/code]