Olá,
Tenho um filtro em jsp que enviado um dado que é texto para buscar em uma tabela, quando fazia o select utuilizando um número, estava funcionando, mas com texto não funciona mais.
Este é o form que envia o dado:
<select name=“idCliente” id=“idCliente” style=“width: 100%” <%=clientes.size()==0?“disabled”:""%> onChange=“busca_contatos(this.form, this.value)”>
SELECIONE
<%
CadastroClientes cliente = null;
for (int i=0; i
><%=cliente.getEmpresa()%>
<%
}
%>
cliente.getEmpresa() = vinão soft
Esse é o javascript que envia para o java:
function busca_contatos(form, id) {
form.action=‘Controller?cmd=abrirhistoricocontatos&idCliente=’+id;
form.submit();
}
E esse é o java:
rs = st.executeQuery("SELECT * FROM Contato WHERE cliente = " + id);
Este é o erro:
http://localhost:8080/polo/servlet/Controller?cmd=abrirhistoricocontatos&idCliente=vinão%20soft
Syntax error or access violation, message from server: “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 ‘soft’ at line 1”
Ops…
Na parte javascript está certo, verifique a maneira como você está lendo o parâmetro “id”, deve ser algo como
request.getParameter(“idCliente”)
E outra coisa, se o campo cliente for do tipo char na tabela você deve colocar o texto entre aspas simples. Não conheço MySQL mas no Oracle seria assim:
rs = st.executeQuery("SELECT * FROM Contato WHERE cliente = ’ " + id + " ’ ");
Blz?
Olá,
Eu pego o idCliente assim:
String idCliente = request.getParameter(“idCliente”)==null?“0”:request.getParameter(“idCliente”);
request.setAttribute(“contato_cliente”, cDAO.findAllByCliente(idCliente));
E o find…:
public Collection findAllByCliente(String id) throws Exception {
// TODO Auto-generated method stub
Connection conn = null;
Statement st = null;
ResultSet rs = null;
LinkedList contatos = new LinkedList();
try {
conn = Pool.getConnection();
st = conn.createStatement();
rs = st.executeQuery(“SELECT * FROM Contato WHERE cliente = '” + id + “’”);
while (rs.next())
contatos.add((Contato)createObject(rs));
} finally {
Util.freeResources(new Object[] { conn, st, rs });
}
return contatos;
}
E continua dando erro:
http://localhost:8080/polo/servlet/Controller?cmd=abrirhistoricocontatos&idCliente=centro%20apta%20citros
Então tenta isso:
rs = st.executeQuery("SELECT * FROM Contato WHERE cliente = " " + id + “” ");
Blz?
Assim:
rs = st.executeQuery(“SELECT * FROM Contato WHERE cliente = “” + id + “””);
Não funcionou também.
Que tipo de coluna é ‘cliente’ na tabela Contato?
Se for number esquece, só vai funcionar com número.
Se for char (varchar2/string), deveria funcionar, mas coloque uma mensagem para depurar o conteúdo da variável idCliente.
Note que no seu exemplo de URL o parâmetro está sendo passado com espaço em branco e o browser substitui isso por %20 tantos espaços em branco quantos ele encontrar.
Eentão, veja se o request está retornando %20 ou realmente espaço em branco.
Se não tiver, adicione a seguinte linha no início da sua página .jsp:
<% @ page contentType=“text/html” %>
Olá,
É do tipo VARCHAR(45).
Printei o request e mostra apenas espaço em branco:
cliente x.
Tentei adicionar <% @ page contentType=“text/html” %>, mas nem carrega o jsp.
Putz, então, acabaram-se minhas tentativas.
Não sei mais o que fazer não pois não conheço MySQL.
Faça o que a mensagem de erro sugere, leia o manual.
Mas antes de tudo, imprima o conteúdo da string SQL já com o valor do request e jogue isso no seu console SQL pra ver se ocorre o mesmo erro.
Boa sorte.