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

java.sql.SQLException Parameterindeks uden for område (1> antal parametre, som er 0)

Du får denne fejl, når du kalder nogen af ​​setXxx() metoder på PreparedStatement , mens SQL-forespørgselsstrengen ikke har nogen pladsholdere ? for dette.

For eksempel er dette forkert :

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

Du skal rette SQL-forespørgselsstrengen i overensstemmelse hermed for at angive pladsholderne.

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

Bemærk, at parameterindekset starter med 1 og at du ikke gør det nødt til at citere disse pladsholdere som sådan:

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

Ellers vil du stadig få den samme undtagelse, fordi SQL-parseren så fortolker dem som de faktiske strengværdier og kan dermed ikke finde pladsholderne længere.

Se også:



  1. Java JDBC Adgang nægtet for brugeren

  2. Sådan finder du nth Row i MySQL

  3. Filtrer på output-klausul sql

  4. Oracle Fast Recovery Area