Вопрос-ответ

java.sql.SQLException Parameter index out of range (1 > number of parameters, which is 0) [closed]

индекс параметра java.sql.SQLException выходит за пределы диапазона (1 > количество параметров, равное 0)

После проверки поля со списком select, которое я выбрал, я не могу вставить его в свою базу данных. Tomcat выдает следующую ошибку:


java.sql.SQLException: индекс параметра вне диапазона (1 > количество параметров, равное 0).


Чем это вызвано и как я могу это решить?

Переведено автоматически
Ответ 1

Вы получите эту ошибку при вызове любого из setXxx() методов на PreparedStatement, в то время как в строке SQL-запроса нет никаких заполнителей ? для этого.

Например, это неправильно:

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (val1, val2, val3)";
// ...

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1); // Fail.
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);

Вам необходимо соответствующим образом исправить строку SQL-запроса, чтобы указать заполнители.

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";
// ...

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1);
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);

Обратите внимание, что индекс параметра начинается с 1 и что вам не нужно заключать эти заполнители в кавычки следующим образом:

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";

В противном случае вы все равно получите то же исключение, потому что анализатор SQL затем интерпретирует их как фактические строковые значения и, таким образом, больше не сможет найти заполнители.

Смотрите также:

Ответ 2

Это проблема с версией драйвера jdbc. У меня была эта проблема при использовании mysql-connector-java-commercial-5.0.3-bin.jar но когда я перешел на более позднюю версию драйвера mysql-connector-java-5.1.22.jar, проблема была исправлена.

2024-02-04 11:35 java mysql jdbc