[RESOLVIDO]Erro consulta SQL

9 respostas
T

Caros amigos estou tendo problema com uma consulta SQL.

String query = "select distinct produto from pedido where produto like '" + produto.getText() + "%' order by produto  ; ";


            PreparedStatement stmt = com.prepareStatement(query);
              
            
            ResultSet rs;
            rs = stmt.executeQuery();

            while (rs.next()) {
                
                lista.addItem(rs.getString("produto"));
            }

tentei também:
[code]

String query = "select distinct produto from pedido where produto like ? order by produto ; ";

PreparedStatement stmt = com.prepareStatement(query);

stmt.setString(1, "'"+produto.getText().trim()+"%'");

ResultSet rs;
rs = stmt.executeQuery();

while (rs.next()) {

lista.addItem(rs.getString("produto"));
}

Na Primeira consulta me retorna todos os produtos, mesmo eu tendo setado o like para me trazer apenas os produtos começando "A";
Na segunda não me retorna nada.

alguma sugestão.

9 Respostas

charleston10

Primeiramente, é melhor seguir o padrão de manipulação de SQL usando PrepareStatement.
Desta forma, nunca vai ter problema com SQL, a não ser por sintaxe (culpa so garotinho em frente do pc geralmente).

O ponto positivo de usa-lo é a segurança, pois evita SQL Injection…

;]

Tudo errado isso:

String query = "select distinct produto from pedido where produto like ? order by produto ; ";

Seria assim

String query = "SELECT DISTINCT produto FROM pedido WHERE produto LIKE %?% ORDER BY produto";
drsmachado

Tem certeza que

produto.getText()

Tem algum valor na primeira consulta, pois, caso seja uma String vazia (""), a cláusula será definida como

LIKE '%'

Que retornará todos os produtos.

Na segunda, isto

stmt.setString(1, "'"+produto.getText().trim()+"%'");

Nunca funcionaria.
O correto é:

stmt.setString(1, produto.getText().trim()  + "%");

Sem as aspas simples.

T

drsmachado:
Tem certeza que

produto.getText()

Tem algum valor na primeira consulta, pois, caso seja uma String vazia (""), a cláusula será definida como

LIKE '%'

Que retornará todos os produtos.

Na segunda, isto

stmt.setString(1, "'"+produto.getText().trim()+"%'");

Nunca funcionaria.
O correto é:

stmt.setString(1, produto.getText().trim()  + "%");

Sem as aspas simples.

Sim! tem valor no campo para realizar a consulta. a respeito da 2º tentativa já utilizei as duas formas e nada.

T

[quote=charleston10]Primeiramente, é melhor seguir o padrão de manipulação de SQL usando PrepareStatement.
Desta forma, nunca vai ter problema com SQL, a não ser por sintaxe (culpa so garotinho em frente do pc geralmente).

O ponto positivo de usa-lo é a segurança, pois evita SQL Injection…

;]

Tudo errado isso:

String query = "select distinct produto from pedido where produto like ? order by produto ; ";

Seria assim

String query = "SELECT DISTINCT produto FROM pedido WHERE produto LIKE %?% ORDER BY produto";

Utilizei a forma que você sugeriu mas mesmo assim continua dando errado.

pmlm

A tua query estava certa:

String query = "select distinct produto from pedido where produto like ? order by produto";

E o parametro deve ser settado como drsmachado já havia dito:

stmt.setString(1, produto.getText().trim()  + "%");
drsmachado

[quote=charleston10]

String query = "SELECT DISTINCT produto FROM pedido WHERE produto LIKE %?% ORDER BY produto";

Caramba, não tinha visto.
Essa forma nunca irá funcionar.
O PreparedStatement irá substituir o operador ? pelo valor informado no método setYyyy correspondente ao tipo de dado que ele representa, portanto, os % antes e após são inúteis.

charleston10

[quote=drsmachado]

charleston10:

String query = "SELECT DISTINCT produto FROM pedido WHERE produto LIKE %?% ORDER BY produto";

Caramba, não tinha visto.
Essa forma nunca irá funcionar.
O PreparedStatement irá substituir o operador ? pelo valor informado no método setYyyy correspondente ao tipo de dado que ele representa, portanto, os % antes e após são inúteis.

Nem comento, como iria dar errado ? (rsrs)

Entao acabei de analisar o codigo, acabou faltando os Apostrofos da consulta…

E outra, cara se vc for testar esse comando, testa primeiro no banco de dados pra ter certeza… (para o autor do post)

String query = "SELECT DISTINCT produto FROM pedido WHERE produto LIKE '%?%' ORDER BY produto"; lta
Se nao certo tenta concatenar os apostrofo com sua string de consulta, mas isso ai… a logica e essa…

charleston10
pmlm

Porque insistes no erro? Colocar o ponto de interrogação entre os simbolos de percentagem NÃO funciona.

Como foi mostrado atrás, a percentagem tem de ficar na String. O ponto de interrogação fica sozinho na query. E não são precisas de plicas ou apóstrofos ou como lhe queiras chamar.

Criado 1 de fevereiro de 2013
Ultima resposta 2 de fev. de 2013
Respostas 9
Participantes 4