Mysql
 sql >> Base de données >  >> RDS >> Mysql

java.sql.SQLException Parameter index out of range (1> nombre de paramètres, qui est 0)

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.

Voir aussi :