Синтаксическая ошибка SQL 1064 с использованием подготовленного оператора JDBC - PullRequest
2 голосов
/ 17 января 2012

у меня есть:

String query = "INSERT INTO Basestations VALUES(?, ?, ?, ?, ?, ?, ?,"
               + "?, ?, ?, ?, ?, ?, ?, ?)";                  


PreparedStatement prep = conn.prepareStatement(query);

prep.setInt(1, profile.getNetworkId());
prep.setInt(2, profile.getBaseStationId());
prep.setInt(8, profile.getLoadLevel());
prep.setInt(11, profile.getPositionX());
prep.setInt(12, profile.getPositionY());
prep.setInt(13, profile.getPort());

prep.setDouble(3, profile.getSignalStrength());
prep.setDouble(4, profile.getFrequency());
prep.setDouble(6, profile.getMaxBitrate());
prep.setDouble(7, profile.getGuaranteedBitrate());
prep.setDouble(10, profile.getRange());

prep.setString(5, profile.getNetworkType());
prep.setString(9, profile.getProvider());
prep.setString(14, profile.getCharging());

prep.setBoolean(15, true);


prep.executeUpdate(query);

и я получаю:

ИНФОРМАЦИЯ: Исключение SQL: ИНФОРМАЦИЯ: Состояние: 42000 ИНФОРМАЦИЯ: Сообщение: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)' в строка 1 ИНФОРМАЦИЯ: Ошибка: 1064

что может быть не так?

Ответы [ 3 ]

9 голосов
/ 17 января 2012

Вы передаете строку, представляющую недопустимый оператор SQL, методу executeUpdate(), когда вам это не нужно. Попробуйте просто сделать prep.executeUpdate();.

2 голосов
/ 17 января 2012

В последней строке вам не нужно передавать запрос переменной.

Так изменить

 prep.executeUpdate(query);

Для:

 prep.executeUpdate();
1 голос
/ 17 января 2012

Основная ошибка здесь:

 // incorrect
 prep.executeUpdate(query);

 // correct
 prep.executeUpdate();

Но, пожалуйста, попробуйте ввести ваш SQL в следующей форме:

UPDATE table_name(field1, field2, field3) VALUES(?, ? ,?)

Это предотвратит взлом вашего кода при обновлении таблицы.

...