Erro de sintaxe no parâmetro da query

4 respostas
M

Pessoal,

Quando tento utilizar a seguinte query ?

String sql_cons = "select usuario_cpf, usuario_nome, usuario_emailprinc, " +
					  "usuario_emailalter, usuario_telefone, usuario_perfil " +
					  "from tb_usuario "  + 
					  "where usuario_nome = ?";

em um método de consulta, é exibida aquela mensagem de erro de sintaxe no MySQL, como segue :

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

Não estou conseguindo entender onde está esse que supostamente estaria relacionado com o "?".
 re-escrevi esta query de várias formas, mas o erro de sintaxe ainda persiste.
Apesar de ser uma dúvida simples, será que alguém poderia me ajudar ?
Agradece,

Max

4 Respostas

pablouu

posta o código todo se puder para darmos uma olhada
vc utilizou o preparedstatement corretamente??
outra dica seria na concatenação das strings, pode estar faltando algum espaço
qnd vc faz :
"usuario_emailalter, usuario_telefone, usuario_perfil " +
"from tb_usuario " +
a string pode ficar:
usuario_emailalter, usuario_telefone, usuario_perfilfrom tb_usuario
o q resulta em erro

M

Segue, abaixo, o código completo da classe UsuarioDAO

package dao;

import model.Usuario;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UsuarioDAO {
	
	public void insereUsuario(Usuario u) {
		
		Connection conexao = null;
		ConectaMySQL con1 = new ConectaMySQL();
	
		String sql = "INSERT INTO tb_usuario (usuario_cpf, usuario_nome, usuario_senha, usuario_confsenha, " +
                                 "usuario_emailprinc, usuario_emailalter, usuario_telefone, " + "usuario_perfil" + ") VALUES (?,?,?,?,?,?,?,?)";
			                 
		conexao = con1.obtemConexao();
		
		try {
			
			PreparedStatement pstmt = conexao.prepareStatement(sql);
			pstmt.setString(1, u.getCpf());  
			pstmt.setString(2, u.getNome());  
			pstmt.setString(3, u.getSenha());  
			pstmt.setString(4, u.getConfirmaSenha());  
			pstmt.setString(5, u.getEmailPrincipal());  
			pstmt.setString(6, u.getEmailAlternativo());  
			pstmt.setString(7, u.getTelefone());  
			pstmt.setString(8, u.getPerfil());  
			pstmt.executeUpdate();
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		} finally {
			
			con1.fechaConexao();
		}
			    		    
	}
	
	public Usuario consultaUsuario(String nomePesq) {
		
		String cpf;
		String nome;
		String emailPrinc;
		String emailAlter;
		String telefone;
		String perfil; 
		Connection conexao = null;
		ConectaMySQL con1 = new ConectaMySQL();
		ResultSet rs;
		PreparedStatement pstmt;
			
		String sql_cons = "select usuario_cpf, usuario_nome, usuario_emailprinc, usuario_emailalter, usuario_telefone, usuario_perfil " +
			                  " from tb_usuario where usuario_nome = ?";
	
		
		conexao = con1.obtemConexao();
		
		Usuario u1 = new Usuario();
		
		try {
			
			pstmt = conexao.prepareStatement(sql_cons);
			rs = pstmt.executeQuery(sql_cons);
			
			while ( rs.next() ) {
				
				nome = rs.getString(3);
			
				if (nome.equals(null)) {
					
					System.out.println("Usuario não encontrado");
					
					u1 = null;
				}
				else {
									 			
					cpf = rs.getString(2);
					emailPrinc = rs.getString(4);
					emailAlter = rs.getString(5);
					telefone = rs.getString(6);
					perfil = rs.getString(7); 
					
					u1.setCpf(cpf);
					u1.setNome(nome);
					u1.setEmailPrincipal(emailPrinc);
					u1.setEmailAlternativo(emailAlter);
					u1.setTelefone(telefone);
					u1.setPerfil(perfil); 
					
				}	
		
			}
			
		} catch (SQLException e) {
			
			e.printStackTrace();	
		
		} finally {
			
			con1.fechaConexao();
			//rs.close();
		}  
	    return u1;

	}	
	
	public void listaUsuarios() {
		
	} 	
}
M

Max,

Primeiro vc não precisa para o sql de consulta para para o executeQuery ficando assim:

Segundo vc esqueceu de setar o parametro de consulta para o PrepareStatment fazendo assim:

Altera ae e veja se funciona blz.

M

Muito obrigado por lembrar dos detalhes acima, que eu havia esquecido.
Funcionou. Valeu aí pela ajuda.

[]'s
Max

Criado 14 de outubro de 2009
Ultima resposta 15 de out. de 2009
Respostas 4
Participantes 3