Использую 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)
Вы получите эту ошибку при вызове любого из 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 будет интерпретировать их как фактические строковые значения и, следовательно, больше не сможет найти заполнители.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости