Ще получите тази грешка, когато извикате някой от 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 след това ще ги интерпретира като действителните стойности на низове и по този начин вече не може да намери заместителите.