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