Mysql
 sql >> Datenbank >  >> RDS >> Mysql

java.sql.SQLException Parameterindex außerhalb des zulässigen Bereichs (1> Anzahl der Parameter, also 0)

Sie erhalten diesen Fehler, wenn Sie setXxx() aufrufen Methoden auf PreparedStatement , während der SQL-Abfragestring keine Platzhalter ? hat dafür.

Das ist zum Beispiel falsch :

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

Sie müssen den SQL-Abfragestring entsprechend korrigieren, um die Platzhalter anzugeben.

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

Beachten Sie, dass der Parameterindex mit 1 beginnt und das tun Sie nicht müssen diese Platzhalter wie folgt zitieren:

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

Andernfalls erhalten Sie immer noch die gleiche Ausnahme, da der SQL-Parser sie dann als tatsächliche Zeichenfolgenwerte interpretiert und die Platzhalter daher nicht mehr finden kann.

Siehe auch: