Mysql
 sql >> Database >  >> RDS >> Mysql

java.sql.SQLException Indice parametro fuori intervallo (1> numero di parametri, che è 0)

Riceverai questo errore quando chiami uno qualsiasi dei setXxx() metodi su PreparedStatement , mentre la stringa di query SQL non ha alcun segnaposto ? per questo.

Ad esempio questo è sbagliato :

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);

È necessario correggere la stringa di query SQL di conseguenza per specificare i segnaposto.

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);

Nota che l'indice del parametro inizia con 1 e che tu non è necessario citare quei segnaposto in questo modo:

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";

Altrimenti otterrai ancora la stessa eccezione, perché il parser SQL li interpreterà come valori di stringa effettivi e quindi non riuscirà più a trovare i segnaposto.

Vedi anche: