Consulta SQL Access dando erro

4 respostas
vitorkgb

Galera, estou tentando consultar uma data no banco access (infelizmente o BD é nesse banco), mas está dando erro

sql =  "select hora, cod from catraca where catraca = 'portaria' and matricula = " + mat + " and dia = #" +
                    calendar.getTime() + "# order by hora";

            stmt = theConn.createStatement();
            rs = stmt.executeQuery(sql);

já tentei sem a #

sql =  "select hora, cod from catraca where catraca = 'portaria' and matricula = " + mat + " and dia = " +
                    calendar.getTime() + " order by hora";

            stmt = theConn.createStatement();
            rs = stmt.executeQuery(sql);

mas sempre dá o erro abaixo

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na data na express?o de consulta 'catraca = 'portaria' and matricula = 25360 and dia = #Mon Nov 01 00:00:00 BRST 2010#'.

4 Respostas

E

O MS-Access não aceita esse formato “#Mon Nov 01 00:00:00 BRST 2010#”. Ele quer algo como “#2010-11-01#” (ano, mês, dia)

Gerson_da_S_Lima

Ao invés de tentar concatenar strings, etc, para montar a consulta, não seria melhor uzaer um PreparedStatement?

Seria algo do tipo:

String sql = "select hora, cod from catraca where catraca = ? and matricula = ? and dia = ? order by hora"
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, "portaria");
pst.setInt(2, mat);
pst.setDate(3, new Date());

ResultSet rs = pst.executeQuery();
V

Gerson da S. Lima, boa noite!

Valeu a dica do PreparedStatement. Usei aqui e ajudou demais. Nunca tinha usado e bombou aki. Sucesso prá vc!

Gerson_da_S_Lima

Beleza vicentedomingos. Isso também pode ser usado em HQL (linguagem para queries do Hibernate), lá é um pouco diferente, mas a idéia é a mesma.
E cara, sempre use assim, é muito ruim concatenar String para criar queries, seu código fica muito vunerável.

Criado 16 de novembro de 2010
Ultima resposta 1 de jun. de 2012
Respostas 4
Participantes 4