Count() de executeQuery() trazendo número diferente do count() em banco de dados

5 respostas
J

Galera, eu criei uma tabela encomendas e um programa com um método de leitura. Executando a mesma operação de select em executeQuery() e no SQLyog (sim, eu sei, não é um programa bom) os resultados são diferentes. No executeQuery() o count() resulta em 3, enquanto no SQLyog é 6. Eis as operações abaixo:

SQLyog:

SELECT dataEntrega, COUNT(*) AS nEnc
FROM encomenda
WHERE status = 'Aberto' OR status = 'aberto'
GROUP BY dataEntrega
HAVING dataEntrega > '2012-11-06'
ORDER BY dataEntrega ASC;

executeQuery():

Date date = new Date();    
        PreparedStatement stat = connection.prepareStatement(    
                "SELECT dataEntrega, COUNT(numero) AS nEnc"
                + " FROM encomenda"    
                + " WHERE status = ? OR status = ? "    
                + " GROUP BY dataEntrega"    
                + " HAVING dataEntrega > ?"
                + " ORDER BY dataEntrega ASC");    
        stat.setString(1, "Aberto");    
        stat.setString(2, "aberto");
        stat.setDate(3, new java.sql.Date(date.getTime()));
        ResultSet res = stat.executeQuery();

5 Respostas

Hebert_Coelho

Será que seu problema não está aqui?

stat.setDate(3, new java.sql.Date(date.getTime()));
J

Pode ser, mas onde é o erro? eu quero passar nesse parâmetro a data atual, igual à do SELECT no SQLyog.
Se esta errado, como conserto?

H

já experimentou colocar esta data fixa?

+ " HAVING dataEntrega > '2012-11-06'"
J

Valeu haroflow, como quero passar sempre a data atual usei passando uma String no lugar do date, com um SimpleDateFormat(“yyyy-dd-MM”) e funcionou. Obrigado

ViniGodoy

Você deve definir as horas, minutos e segundos da sua data para 0. O now() irá te retornar esses campos, por isso a diferença.

Ou use o JODA-Time, que tem a classe DateMidnight.

Criado 11 de junho de 2012
Ultima resposta 12 de jun. de 2012
Respostas 5
Participantes 4