..error in your SQL syntax

Pessoal,
Alguém poderia me dizer onde está o erro nessa consulta?
POis está retornando o erro abaixo:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) at com.mysql.jdbc.Connection.execSQL(Connection.java:3206) at com.mysql.jdbc.Statement.executeQuery(Statement.java:1232) at dao.mysql.campanhaDaoMysql.listarTodasCampanhas(campanhaDaoMysql.java:44) at Controlador.Servlet.processRequest(Servlet.java:43) at Controlador.Servlet.doPost(Servlet.java:80) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:662)

Consulta:

[code]public List listarTodasCampanhas(String modelo) {
try {
conn = (Connection) ConnectionFactory.getConnection();
String sql = “select * from listaCampanha where modelo like?”;

        PreparedStatement stmt = conn.prepareStatement(sql);
       stmt.setString(1, modelo);
        //stmt.setString(2, modelo);

        ResultSet rs = stmt.executeQuery(sql);
        List<campanha> lista = new ArrayList();

        while (rs.next()) {
            campanha c = new campanha();
            c.setId(rs.getInt(1));
            c.setConcessao(rs.getString(2));
            c.setModelo(rs.getString(3));
            c.setItem(rs.getString(4));
            c.setCodigo(rs.getString(5));
            c.setPreco(rs.getString(6));
            c.setMo(rs.getString(7));
            lista.add(c);
        }
        rs.close();
        return lista;
    } catch (Exception ex) {
        Logger.getLogger(campanhaDaoMysql.class.getName()).log(Level.SEVERE, null, ex);
    }
    return null;

}[/code]

O erro está aqui:

String sql = "select * from listaCampanha where modelo like?";

tente algo assim

String sql = "select * from listaCampanha where modelo like 'teste'";

[quote=Sevalle]O erro está aqui:

String sql = "select * from listaCampanha where modelo like?";

tente algo assim

String sql = "select * from listaCampanha where modelo like 'teste'";

[/quote]

Dessa forma funcinou porém preciso passar 2 variáveil nessa consulta, normalmente não se usa o sinal ‘?’ pra isso?

[quote=CaioNascimento][quote=Sevalle]O erro está aqui:

String sql = "select * from listaCampanha where modelo like?";

tente algo assim

String sql = "select * from listaCampanha where modelo like 'teste'";

[/quote]

Dessa forma funcinou porém preciso passar 2 variáveil nessa consulta, normalmente não se usa o sinal ‘?’ pra isso?[/quote]

Sim, se usa.
Problema é que tu “grudou” o ‘?’ no LIKE, percebes?

Que eu saiba não.

Depende de como você quer fazer o select, mas pode ser algo assim:

SELECT * FROM tabela WHERE coluna1 LIKE 'teste' OR coluna1 LIKE '12345'

nel,

Corrigi o o sql e continua com o mesmo erro anterior:

[code]String sql = “select * from listaCampanha where modelo like ?”;

        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setString(1, modelo);[/code]

Achei estranho da esse erro pra vc depois que colocou espaço entre o ‘LIKE’ e o ‘?’. Olha um teste que fiz e não deu erro:

[code]import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import junit.framework.TestCase;

public class DBTest extends TestCase {

public void test1() throws Exception {
	// new Driver();
	Connection c = DriverManager.getConnection("jdbc:mysql://localhost/ccc", "root", "root");
	PreparedStatement stmt = c.prepareStatement("SELECT * FROM tb_usuario WHERE NOM_USUARIO LIKE ?");
	stmt.setString(1, "%Adm%");
	ResultSet rs = stmt.executeQuery();
	while (rs.next()) {
		System.out.println(rs.getString("NOM_USUARIO"));
	}
	rs.close();
	stmt.close();
	c.close();
}

}[/code]

O erro que ocorre continua o mesmo?(reclamando do ‘?’)

È estranho mesmo o erro persiste:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) at com.mysql.jdbc.Connection.execSQL(Connection.java:3206) at com.mysql.jdbc.Statement.executeQuery(Statement.java:1232) at dao.mysql.campanhaDaoMysql.listarTodasCampanhas(campanhaDaoMysql.java:44) at Controlador.Servlet.processRequest(Servlet.java:43) at Controlador.Servlet.doPost(Servlet.java:80) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:662)

use assim: like ‘?’

Dessa forma retornou o erro abaixo:

28/11/2011 09:58:07 dao.mysql.campanhaDaoMysql listarTodasCampanhas
GRAVE: null
java.sql.SQLException: Parameter index out of range (1 &gt; number of parameters, which is 0).
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
        at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2796)
        at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:3627)
        at dao.mysql.campanhaDaoMysql.listarTodasCampanhas(campanhaDaoMysql.java:41)
        at Controlador.Servlet.processRequest(Servlet.java:43)
        at Controlador.Servlet.doPost(Servlet.java:80)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:662)

tenta algo assim:

String sql = "select * from produtos where DESCRICAO like " + “’%Mini%’”

e tira o setString.

o engracado que testei aqui no oracle e tudo ele aceita like junto com ?, like com ‘’ sem ‘’. ele aceita tudo.

parece que o mysql eh mais enjoado.

[]´s

A unica forma que funcionou foi assim:

String sql = “select * from tabela where campo like " +”’"+variável+"’";

gambis total.

Oi.

Veja:

String sql = "select * from listaCampanha where modelo like '%?%'";

Desculpe, creio que precise das aspas simples (’ ') para funcionar.
Acredito que funcione perfeitamente.

28/11/2011 09:58:07 dao.mysql.campanhaDaoMysql listarTodasCampanhas GRAVE: null java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

Teste da forma como menciono em post anterior.

Acredito que com o select no formato abaixo deve funcionar:

      String sql = "select * from listaCampanha where modelo like ?";  //apenas coloca o espaço no like

Agora, acho que o outro problema está no resto do seu código, neste trecho:

            PreparedStatement stmt = conn.prepareStatement(sql);  
           stmt.setString(1, modelo);  
            //stmt.setString(2, modelo);  
  
            ResultSet rs = stmt.executeQuery(sql);  
            List&lt;campanha&gt; lista = new ArrayList();  

Repare que está usando o método executeQuery passando a variável sql novamente como parâmetro.

Utilize a versão sem parâmetros stmt.executeQuery()

PreparedStatement stmt = conn.prepareStatement(sql);  
           stmt.setString(1, modelo);  
             ResultSet rs = stmt.executeQuery(sql);  // AQUI ESTA O ERRO REMOVA O PARAMETRO sql
             List&lt;campanha&gt; lista = new ArrayList();  

xD o amigo ae de cima ja matou a charada antes.

[]´s

Oi.

Se testou assim:

String sql = "select * from listaCampanha where modelo like '%?%'";  

E existe algum erro ainda, creio que o problema seja questão de caracter de escape.
Provavelmente terás de usar um caracter de escape para conseguir inserir isso da forma correta.

Abraços.

Fiz isso, deu o erro que mencionei

[code]String sql = “select * from listaCampanha where modelo like”+"’%?%’";

        PreparedStatement stmt = conn.prepareStatement(sql);  
        stmt.setString(1, modelo); [/code]