Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQLSyntaxErrorException близо до ? когато се опитвате да изпълните PreparedStatement

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на версията на вашия MySQL сървър за правилния синтаксис, който да използвате близо до '? или Име на член =?' на ред 1

MySQL не разбира значението на ? в SQL заявката. Това наистина е невалиден SQL синтаксис. Така че някак си не е заменен от PreparedStatement . И познайте какво?

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(query); // Fail!

Вие заменяте подготвената заявка с оригиналната заявка! Трябва да извикате без аргументи PreparedStatement#executeQuery() метод вместо Statement#executeQuery(String) .

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // OK!

Несвързан с проблема, вашият код изтича ресурси. БД ще се изчерпи след няколко часа и приложението ви ще се срине. За да коригирате това, трябва да следвате идиома на JDBC за затваряне на Connection , Statement и ResultSet в finally блок на try блокират там, където са придобити. Вижте основния урок за JDBC за повече подробности.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавя нова колона към таблицата на MYSQL?

  2. Невалидна стойност по подразбиране за 'dateAdded'

  3. Използвайте MySQL релационни бази данни в Ubuntu 8.04 (Hardy)

  4. Функция SUM() в MySQL

  5. Как да защитим MySQL:Част първа