Не удаётся внести данные в MySQL таблицу

166
14 декабря 2019, 19:20

Использую preparedStatement, вот код:

query = "INSERT INTO instdb (" +
         "id," +
         "name," +
         "username," +
         "descr," +
         "tel," +
         "vk," +
         "ownerId," +
         "query," +
         "postId," +
         "parametr) VALUES" +
         "(?,?,?,?,?,?,?,?,?,?)";
stmt.setInt(1, maxid);
stmt.setString(2,user.getFull_name());
stmt.setString(3,username);
stmt.setString(4,caption);
stmt.setString(5,longestTel);
stmt.setString(6,vk);
stmt.setString(7,ownerId);
stmt.setString(8,addons.get(j));
stmt.setString(9,postId);
stmt.setString(10,param);

На строке stmt.setInt(1, maxid); появляется ошибка:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0)
Answer 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);

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

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

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

READ ALSO
Аналог AuthorizationCodeInstalledApp на Android (Google API)

Аналог AuthorizationCodeInstalledApp на Android (Google API)

Пытаюсь запустить пример кода из Google Quickstart для Java на Android - эмуляторе, но код падает на строчке

157
Как в ListView отобразить данные от другого Activity, вызванного через ItemClick?

Как в ListView отобразить данные от другого Activity, вызванного через ItemClick?

У меня есть два активитиВ одном находится ListView, а в другом поля, где я выбираю параметры

167
TabLayout перекрывает текст в Fragment

TabLayout перекрывает текст в Fragment

Пожалуйста, подскажите, как быть с такой проблемой: TabLayout находится ниже Toolbar (AppBar)И текст, размещенный на странице приложения, начинает идти...

133
Перевод int в byte?

Перевод int в byte?

Как переводится (обрезается) int до размера byte? Где-то вычитал, что от int отнимается 128 пока число не войдет в диапазон -128

127