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
за повече подробности.