Во-первых: у вас есть лишний }
в коде, я отредактировал ваш вопрос и удалил его.
Во-вторых, реальный вопрос.
Ваш запрос:
String updateQuery = "UPDATE tblUser SET (level) = (?) WHERE username=" + "'" + rs.getString("username") + "'";
И тогда вы готовите это:
PreparedStatement st = conn.prepareStatement(updateQuery);
Итак, после подготовки у объекта st
есть 1 доступный аргумент. Значение, которое заменит отметку ?
в запросе. st
не знает, что замена ?
на самом деле является 5-м элементом в базе данных. С этой точки зрения, есть только 1 аргумент, который он ожидает.
Если вы хотите установить значение ?
в запросе, то это поле № 1. Итак, ваш код должен быть:
st.setString(1,newLevel);
Смотрите эту страницу: https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html
Он показывает вам пример подготовленного заявления с более чем одним ?
. Вы увидите два ?
в запросе. Поэтому они должны установить значения 1
и 2
.
Еще один момент, я не понимаю, почему вы берете (уровень + 1) и конвертируете его в строку. Вы можете использовать st.setInt(1, newLevel)
и хранить все цифры. Ваш звонок. Просто убедитесь, что тип данных поля в базе данных также является целым числом.