В следующем коде:Проблемы с подготовленным заявлением
PreparedStatement statement = conn
.prepareStatement(SQLQueries.isMuted);
statement.setString(1, player);
statement.setString(2, player);
//in SQLQueries.java
public static final String isMuted = "SELECT EXISTS(SELECT * FROM "
+ "(SELECT playerid FROM mute, players AS player "
+ "WHERE player.username = '?' AND playerid = player.id"
+ "UNION ALL "
+ "SELECT playerid FROM tempmute, players AS player "
+ "WHERE player.username = '?' AND playerid = player.id) AS tbl) "
+ "AS isMuted;";
я получаю следующее сообщение об ошибке:
[08:10:38 WARN]: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
Я очень путать с тем, что, поскольку документация сказала мне индекс параметра начинается с 1 , и это подтверждается, потому что, когда я сменил операторы setString на 0 и 1, он дал мне еще одну ошибку. Кроме того, в заявлении есть два заполнителя, поэтому я не понимаю, почему этот код терпит неудачу.
Я что-то забыл в документации?
Может быть, вы добавили параметры в 'SQLQueries.isMuted' вместо' isBanned'? –
Вам не нужно удалять котировки вокруг параметров? – Keppil
Я думаю, что Keppil прав - Java не видит никаких параметров в SQL, он видит (и не имеет отношения) условие проверки на равенство с литеральной строкой, содержащей ровно один знак вопроса. Так измените '?' с ?. – Chris