Vous obtiendrez cette erreur lorsque vous appelez l'un des setXxx()
méthodes sur PreparedStatement
, alors que la chaîne de requête SQL n'a pas d'espace réservé ?
pour cela.
Par exemple, c'est faux :
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);
Vous devez corriger la chaîne de requête SQL en conséquence pour spécifier les espaces réservés.
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);
Notez que l'index du paramètre commence par 1
et que vous ne faites pas besoin de citer ces espaces réservés comme suit :
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
Sinon, vous obtiendrez toujours la même exception, car l'analyseur SQL les interprétera alors comme les valeurs de chaîne réelles et ne pourra donc plus trouver les espaces réservés.