Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQLSyntaxErrorException próximo? ao tentar executar PreparedStatement


com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MySQL para a sintaxe correta a ser usada perto de '? ou MemberName =?' na linha 1

MySQL não entende o significado de ? na consulta SQL. É realmente uma sintaxe SQL inválida. Então, de alguma forma, não foi substituído por PreparedStatement . E adivinha?
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(query); // Fail!

Você está substituindo a consulta preparada pela consulta original! Você precisa chamar o PreparedStatement#executeQuery() método em vez de Statement#executeQuery(String) .
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // OK!

Não relacionado ao problema, seu código está vazando recursos. O banco de dados ficará sem eles após várias horas e seu aplicativo travará. Para corrigir isso, você precisa seguir o idioma JDBC de fechar Connection , Statement e ResultSet no finally bloco do try bloco onde foram adquiridos. Confira o tutorial básico de JDBC para mais detalhes.