sql >> Base de Datos >  >> RDS >> Mysql

java.sql.SQLException Índice de parámetro fuera de rango (1> número de parámetros, que es 0)

Obtendrá este error cuando llame a cualquiera de los setXxx() métodos en PreparedStatement , mientras que la cadena de consulta SQL no tiene marcadores de posición ? por esto.

Por ejemplo, esto es incorrecto :

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

Debe corregir la cadena de consulta SQL en consecuencia para especificar los marcadores de posición.

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

Tenga en cuenta que el índice de parámetros comienza con 1 y que tu no necesito citar esos marcadores de posición así:

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

De lo contrario, obtendrá la misma excepción, porque el analizador SQL los interpretará como los valores de cadena reales y, por lo tanto, ya no podrá encontrar los marcadores de posición.

Ver también: